【问题标题】:How to kill interactive shell and process/jobs running on it?如何杀死在其上运行的交互式 shell 和进程/作业?
【发布时间】:2019-05-05 16:12:21
【问题描述】:

我正在使用 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。

【问题讨论】:

    标签: linux bash shell docker interactive


    【解决方案1】:

    你应该先获取子进程,然后再杀死 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多