如何杀死未连接到任何终端的进程

Kar*_*ahi 2 kill top process-management background-process

我在 OpenVZ VPS 上,我以非 root 用户身份创建了一个后台进程,然后取消了它,即

user@server:~$node server.js &
user@server:~$disown
Run Code Online (Sandbox Code Playgroud)

我 SSH 退出了 VPS,现在我又回来了,但我似乎无法使用其 PID 终止该进程。Pkill 1292. 它甚至以 root 身份失败。我知道它没有死,因为当我运行top它直到运行。此外,当我运行时,ps -l -p 1292我可以看到该过程一直在运行。

我可以说该进程没有附加到任何终端会话,因为ps命令在 TTY 上显示一个问号,即

截屏

我如何杀死这个进程?

Sté*_*las 6

pkill(像pgrep它使用相同的接口,最初是一个 Solaris 命令,现在在许多其他类 Unix 上都可以找到,包括 Linux(procps包))是根据进程的名称杀死进程。

pkill regexp
Run Code Online (Sandbox Code Playgroud)

杀死(发送SIGTERM信号)到名称¹ 匹配给定正则表达式的所有进程。

所以这里pkill node会杀死所有名称包含node. 使用pkill -x node-x如 in grep/pgrep表示完全匹配)杀死名称正好为 node.

要基于 pid² 进行终止,它只是kill(大多数 shell 中内置的命令,因此它也可以用于 shell 作业,也可以作为独立实用程序使用)。

如果kill 6806( 的缩写kill -s TERM 6806)失败,您可以作为最后的尝试kill -s KILL 6806,这将非优雅地终止它


¹进程名称是一个根据操作系统而有所不同的概念。在 Linux 上,通常最多为进程(或其最近的祖先)执行的文件的基本名称的前 15 个字节,尽管进程可能会将其更改为任意(但不超过 15 个字节)的值。另请参阅pkill -f以匹配参数列表。

²kill也可以根据进程id杀死。kill -- -123将 SIGTERM 信号发送到进程组 ID 为 123 的所有进程。当使用kill内置 POSIX shell的作业规范(如kill %spec)时,kill通常也会向进程发送信号。