我正在使用docker容器交互式shell在shell上执行命令。
e.g. docker exec -i docker_container_name sh
,然后在此交互式shell上启动命令。现在,如果我想杀死此交互式外壳并在其上运行命令,该怎么做?
我尝试将kill -9 shell_pid or kill -s 15 shell_pid
信号发送到交互式外壳。但是,在这种情况下,交互式外壳程序被杀死,但是在交互式外壳程序上运行的命令一直到那里并成为孤立进程。
请让我知道如何使用在其上运行的命令杀死交互式shell。
答案 0 :(得分:1)
在杀死外壳并杀死它们之前,您应该先让子进程进行处理
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