我跑去ps aux --forest -j
看父进程和子进程。这是一个例子:
root 3744 3744 3744 0.0 0.2 77084 4160 ? Ss 09:34 0:00 /usr/sbin/cupsd -f
lp 3747 3747 3744 0.0 0.1 63156 2236 ? S 09:34 0:00 \_ /usr/lib/cups/notifier/dbus dbus://
lp 3748 3748 3744 0.0 0.1 63156 2240 ? S 09:34 0:00 \_ /usr/lib/cups/notifier/dbus dbus://
第三列是 PGID。我的目标是使用父进程的 PGID 3744 杀死所有 3 个 PID。我的命令是 -
pkill -TERM -g 3744
然而,这是有效的,进程会使用新的 PID 重新生成。我怎样才能避免这种情况并使其持久?
答案1
您正在运行 Ubuntu 14.04,它使用upstart
作为其初始化进程。从 中我们可以看到/etc/init/cups.conf
,它有一个respawn
节,因此默认情况下,当 cupsd 进程结束时,将启动另一个节。
# kill -TERM -3390
# tail -1 /var/log/syslog
Aug 9 14:22:49 ubuntu kernel: [ 283.270126] init: cups main process ended, respawning
您说您希望杀死 cupsd 进程树,并在下次重新启动时重新启动。为此,您可以使用initctl stop
(或仅stop
)命令:
# stop cups
cups stop/waiting
cups-browsed
如果您希望停止与杯子相关的所有事情,您可能也想停止。
这不会永久禁用该服务。重新启动后,cups 进程将启动。