265

我正在服务器上运行一个 nohup 进程。当我试图杀死它时,我的腻子控制台会关闭。

这就是我尝试查找进程 ID 的方式:

ps -ef |grep nohup 

这是杀死的命令

 kill -9 1787 787
4

16 回答 16

453

使用nohup并将任务置于后台时,后台运算符 ( &) 将在命令提示符处为您提供 PID。如果您的计划是手动管理进程,您可以保存该 PID 并在需要时使用它来杀死进程,通过kill PIDor kill -9 PID(如果您需要强制终止)。或者,您可以稍后ps -ef | grep "command name"找到 PID 并从那里找到 PID。请注意,nohup关键字/命令本身不会出现在相关ps命令的输出中。

如果您使用脚本,则可以在脚本中执行以下操作:

nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt

这将运行my_command将所有输出保存到my.log(在脚本中,$!表示最后执行的进程的 PID)。这2是标准错误的文件描述符 ( stderr),并2>&1告诉 shell 将标准错误输出路由到标准输出(文件描述符1)。它要求&1shell 知道它是该上下文中的文件描述符,而不仅仅是一个名为1. 需要将2>&1通常写入标准错误的任何错误消息捕获到我们的my.log文件中(来自标准输出)。有关使用 shell 处理 I/O重定向的更多详细信息,请参阅 I/O 重定向。

如果命令定期发送输出,您可以使用 偶尔检查输出tail my.log,或者如果您想“实时”跟踪它,您可以使用tail -f my.log. 最后,如果您需要终止该进程,您可以通过以下方式完成:

kill -9 `cat save_pid.txt`
rm save_pid.txt
于 2013-06-30T10:42:05.143 回答
119

我在 VPS 服务器上使用 red hat linux(并通过 SSH - putty),对我来说,以下工作:

首先,列出所有正在运行的进程:

ps -ef

然后在第一列中找到您的用户名;我找到了以下三遍:

  • 一是SSH连接
  • 第二个是FTP连接
  • 最后一个是nohup进程

然后在第二列中,您可以找到 nohup 进程的 PID,您只需键入:

kill PID 

(当然用 nohup 进程的 PID 替换 PID)

就是这样!

我希望这个答案对我对 bash 和 SSH 也很陌生的人有用,但在这里找到了我需要的 95% 的知识:)

于 2014-08-01T14:51:23.983 回答
68

假设我正在使用以下命令在后台运行 ruby​​ 脚本

nohup ruby script.rb &

然后我可以通过指定命令名称来获取上述后台进程的 pid。在我的例子中,命令是 ruby​​。

ps -ef | grep ruby

输出

ubuntu   25938 25742  0 05:16 pts/0    00:00:00 ruby test.rb

现在您可以使用 kill 命令轻松杀死进程

kill 25938
于 2015-06-23T05:23:47.600 回答
28

jobs -l应该为您提供 nohup 进程列表的 pid。轻轻地杀死(-9)他们。;)

于 2016-02-04T06:28:23.987 回答
10

你可以试试

kill -9 `pgrep [command name]`
于 2014-10-23T00:33:55.047 回答
10

假设您正在使用 nohup 执行 java 程序,您可以通过以下方式获取 java 进程 ID

`ps aux | grep java`

输出

xxxxx     9643  0.0  0.0  14232   968 pts/2   

然后您可以通过键入来终止该进程

sudo kill 9643

或者说你需要杀死所有的java进程然后使用

sudo killall java

这个命令会杀死所有的 java 进程。您可以将其与流程一起使用。只需在命令末尾给出进程名称

sudo killall {processName}
于 2018-03-27T04:55:20.227 回答
6

如果您的应用程序始终使用相同的端口,您可以像这样终止该端口中的所有进程。

kill -9 $(lsof -t -i:8080)

于 2021-01-26T13:06:57.940 回答
4

这适用于Ubuntu

键入此内容以了解PID

ps aux | grep java

将显示所有关于 java 的运行过程

在我的情况下是

johnjoe      3315  9.1  4.0 1465240 335728 ?      Sl   09:42   3:19 java -jar batch.jar

现在杀了它kill -9 3315

僵尸进程终于停止了。

于 2017-02-07T02:37:26.243 回答
3

当您在 nohup 中创建作业时,它会告诉您进程 ID!

nohup sh test.sh &

输出将向您显示进程 ID,例如

25013

你可以杀了它:

kill 25013
于 2019-05-05T01:11:44.233 回答
2

我使用以下命令启动了 django 服务器。

nohup manage.py runserver <localhost:port>

这适用于 CentOS:

:~ ns$netstat -ntlp
:~ ns$kill -9 PID 
于 2017-06-06T05:28:44.843 回答
1

我经常这样做。试试这种方式:

ps aux | grep script_Name

在这里,script_Name可以是nohup运行的任何脚本/文件。此命令为您获取一个进程 ID。然后使用下面的这个命令来杀死在 nohup 上运行的脚本。

kill -9 1787 787

这里,1787 和 787 是问题中提到的进程 ID 作为示例。这应该做问题中的意图。

于 2020-12-29T08:14:45.200 回答
1

如果您不知道 PID,请先使用 TOP 命令找到它

顶部 -U 用户标识

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

您将使用 top 获取 PID,然后执行 kill 操作。

$ kill -9 <PID>
于 2021-01-29T17:16:50.663 回答
0

今天我遇到了同样的问题。而且由于是很久以前的事了,我完全忘记了我使用的是哪个命令以及何时使用的。我尝试了三种方法:

  1. 使用命令中显示的 STIME ps -ef。这显示了您开始进程的时间,并且很可能在您关闭 ssh(取决于您) 之前执行命令。不幸的是,我认为最新的命令不是我使用 nohup 运行的命令,所以这对我不起作用。
  2. 其次是 PPID,也显示在ps -ef命令中。表示父进程ID,即创建进程的进程ID。对于使用 nohup 运行的进程,在 ubuntu 中 ppid 为 1。然后您可以使用ps --ppid "1"获取列表,并检查 TIME(您的进程使用的总 CPU 时间)或 CMD 以查找进程的 PID。
  3. 如果进程占用一些端口,则使用lsof -i:port,您将获得命令。然后就像上面的答案一样,使用ps -ef | grep command,您将获得 PID。

一旦找到进程的PID,就可以kill pid用来终止进程。

于 2019-06-04T05:37:55.963 回答
0

这适用于mac上的mi很好

kill -9 `ps -ef | awk '/nohup/{ print \$2 }'`
于 2020-08-02T14:46:43.980 回答
0

关于失去你的putty:通常ps ... | awk/grep/perl/...过程也会匹配!所以老派的把戏是这样的

ps -ef | grep -i [n]ohup 

这样正则表达式搜索与正则表达式搜索过程不匹配!

于 2020-08-02T16:29:50.000 回答
0

如果您在远程服务器上,请检查内存使用情况top,并找到您的进程及其 ID。之后,只需执行kill [your process ID].

于 2020-08-24T08:35:29.407 回答