相关疑难解决方法(0)

进程后代

我正在尝试构建一个流程容器。容器会触发其他程序。例如 - 使用 '&' 启动运行后台任务的 bash 脚本。

我所追求的重要特性是:当我杀死容器时,它下面产生的所有东西都应该被杀死。不仅是直系子女,还有他们的后代。

当我开始这个项目时,我错误地认为当你杀死一个进程时,它的孩子也会自动被杀死。我曾向有同样错误想法的人寻求建议。虽然有可能捕捉到信号并将杀戮传递给儿童,但这不是我在这里要寻找的。

我相信我想要实现的目标,因为当你关闭一个 xterm 时,它里面运行的任何东西都会被杀死,除非它被 nohup'd。这包括孤立进程。这就是我想要重新创建的。

我有一个想法,我正在寻找的内容涉及 unix 会话。

如果有一种可靠的方法来识别进程的所有后代,那么能够向它们发送任意信号也会很有用。例如SIGUSR1。

process signals fork container

25
推荐指数
4
解决办法
2万
查看次数

使用 `nsenter:` 监禁子进程的可靠方法

我知道 Linux 命名空间,除此之外,还可以用来安全地处理限制和监禁子进程,而不会让它们被僵尸化和转储到init. 但我对实现细节很模糊。我如何使用util-linux诸如mountand提供的工具nsenter来监视、监视和确保启动的所有进程都是另一个进程的直接命名空间后代?

process namespace

16
推荐指数
1
解决办法
7964
查看次数

格式化不带空格的“ps”命令输出

我有以下ps命令来获取所有正在运行的进程的特定属性以及一些属性:

ps --no-headers -exo "uname,ppid,pid,etime,%cpu,%mem,args"
Run Code Online (Sandbox Code Playgroud)

我希望将它格式化为 CSV 以便我可以解析它。注意我把 args 放在最后以方便解析;我不认为 a ,will 存在于任何其他列中 - 如果我错了,请纠正我。

如何去除空格?

ps csv

13
推荐指数
3
解决办法
2万
查看次数

为什么基于取消共享的查杀只能与 --fork 一起可靠地工作?

这个答案中我们了解到,您可以通过 Linux PID 命名空间实现对整个进程子树的可靠终止unshare -p

这是我不明白的问题:

  • 仅当我使用-f/--fork选项取消共享时它才有效。

    unshare -fp -- bash -c "watch /bin/sleep 10000 && echo hi"
    
    Run Code Online (Sandbox Code Playgroud)

    当我运行这个时,kill -9那个的PID bash,然后观看,睡眠等都死了,正如我所希望的那样。

  • 但是当我使用它时没有-f

    unshare -p -- bash -c "watch /bin/sleep 10000 && echo hi"
    
    Run Code Online (Sandbox Code Playgroud)

    kill -9bash PID,然后将其watch重新设置为PID 1(在我的Ubuntu上是systemd),所以我没有达到杀死所有孩子的预期效果。

问题:

  • 为什么--fork必须要达到预期的效果?为什么不unshare使用exec()fork 还不够?
  • 有解决方法吗?我更希望能够方便地发送到通过开始杀死其下面的所有内容kill -9而创建的 PID 。unshare但是当我使用 时--fork,杀死我开始时返回的 pidunshare将简单地杀死unsharebash …

process kill namespace unshare

7
推荐指数
1
解决办法
1885
查看次数

标签 统计

process ×3

namespace ×2

container ×1

csv ×1

fork ×1

kill ×1

ps ×1

signals ×1

unshare ×1