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

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

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

user@server:~$node server.js &
user@server:~$disown

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

我可以看出该进程没有附加到任何终端会话,因为附注命令在 TTY 处显示问号,即

截屏

我该如何杀死这个进程?

答案1

pkill(就像pgrep它使用相同的接口,最初是一个 Solaris 命令,现在在许多其他类 Unix 系统上找到,包括 Linux(procps软件包))是根据进程的名称来终止进程。

pkill regexp

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

所以这里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也可以根据进程kill团体ID。kill -- -123向进程组 ID 为 123 的所有进程发送 SIGTERM 信号。当使用内置 POSIX shell 的作业规范时kill(如kill %spec),kill通常也会向进程发送信号团体

相关内容