如何杀死交互式shell和process/jobs运行就可以了?

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 并对其执行命令 运行,该怎么做?

我尝试发送 kill -9 shell_pid or kill -s 15 shell_pid 信号给交互式 shell。然而,在这种情况下,交互式 shell 被杀死,但交互式 shell 上的命令 运行 一直存在并成为孤儿进程。

请告诉我如何使用命令 运行 终止交互式 shell。

你应该先获取子进程,然后再杀死 shell 并杀死它们

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