[英]How to kill interactive shell and process/jobs running on it?
我正在使用 docker 容器交互式 shell 在 shell 上执行命令。
e.g. docker exec -i docker_container_name sh
我在这个交互式 shell 上启动命令。 现在,如果我想终止此交互式 shell 和在其上运行的命令,该怎么做?
我尝试向交互式 shell 发送kill -9 shell_pid or kill -s 15 shell_pid
信号。 然而,在这种情况下,交互式 shell 被杀死,但在交互式 shell 上运行的命令一直存在并成为孤儿进程。
请让我知道如何使用运行在其上的命令杀死交互式 shell。
您应该先获取子(ren)进程,然后再杀死外壳并杀死它们
CPIDS=`pgrep -P $shellpid` # gets pids of child processes
kill -9 $shellpid
for cpid in $CPIDS ; do kill -9 $cpid ; done
或者(这不是那么安全,因为如果在 shell 中运行一系列命令,可能会在这两个 kill 命令之间调用下一个命令)
pkill -TERM -P $shellpid # sends TERMINATE signal to children
kill -9 $shellpid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.