我希望一次只运行一个 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
Andps
并pgrep
给出与以前相同的输出。
kill -15 924
杀死它但不杀死子进程:(
答案1
它不是负进程 ID。
作为 Kill 的第二个参数传递的负整数表示进程组 ID (pgid)。
要回答您的问题,您无法将信号发送到进程组 id,因为没有具有该编号的进程组 id。
这些可能有用:
ps -ao pid,pgid,user,time,command
ps -q 924 pgid=