如何杀死交互式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
我正在使用 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