为什么我不能用负数杀死这个进程?

为什么我不能用负数杀死这个进程?

我希望一次只运行一个 shell 脚本实例,新的实例会杀死旧的实例。

我在 Linux 上,认为这是一个好方法:

# Terminate other instances by name and name self.
kill -15 $(printf -- '-%s ' $(pgrep mychosenname))
echo mychosenname >| /proc/$$/comm

请注意 printf 来否定 PID,因为我也想杀死子进程。它似乎工作得很好。但由于某种原因,它不适用于从我的 ~/.xprofile (当 X 启动时)生成的进程。

ps -a显示:

...
  924 tty1     00:00:00 mychosenname?
...

pgrep -a mychosenname显示: 924 sh /home/sedwho/projects/mychosenname/run

手动尝试kill -15 -924我得到: kill: kill -924 failed: no such process Andpspgrep给出与以前相同的输出。

kill -15 924杀死它但不杀死子进程:(

答案1

它不是负进程 ID。

作为 Kill 的第二个参数传递的负整数表示进程组 ID (pgid)。

要回答您的问题,您无法将信号发送到进程组 id,因为没有具有该编号的进程组 id。

这些可能有用: ps -ao pid,pgid,user,time,command ps -q 924 pgid=

进程组ID是如何设置的?

ps 手册页

相关内容