gpt4 book ai didi

c - 为什么我不能在 Linux 上通过 execvp() 将 killall 与赋予子进程的新名称一起使用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:42:50 27 4
gpt4 key购买 nike

假设我有一个名为“exe”的可执行文件,它生成一个子进程。这个子进程需要成为一个守护进程,我们需要更改它的名字。接下来我想使用 killall 向这个使用新名称的进程发送信号,但我需要使用旧名称。

事件顺序如下:

  1. 开始“执行”
  2. fork -> 如果父节点退出
  3. 分离(chdir、setsid、umask)
  4. execvp('exec', 'daemon', ...)

在 4 上,argv[0] 设置为 'daemon'。

在此之后,我可以执行“ps”和“top”,我清楚地看到名称“daemon”出现在这些命令的输出中。但是,当我尝试使用 killall 终止进程(向其发送信号)时,我必须提供名称“exec”而不是“daemon”。

似乎内核并没有完全意识到这个新名称。

我需要此功能的原因是我想使用相同的可执行文件生成几个具有不同职责的子进程。我还希望能够通过按名称引用它们来单独停止和启动它们。而且我不想将新名称符号链接(symbolic link)到通用 exec 可执行文件(就像 busybox 那样)。

有解决办法吗?

我正在使用 Linux Ubuntu 9.10。

干杯,约翰

最佳答案

尝试使用 pkill 而不是 killall

关于c - 为什么我不能在 Linux 上通过 execvp() 将 killall 与赋予子进程的新名称一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2386908/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com