如何获取进程ID以杀死nohup进程?

我在服务器上运行nohup进程。当我试图杀死它,我的油灰控制台关闭。

这是我如何试图找到进程ID:

ps -ef |grep nohup

这是杀人的命令

 kill -9 1787 787
556193 次浏览

当使用nohup并将任务放在后台时,后台操作符(&)将在命令提示符处给你PID。如果你的计划是手动管理进程,你可以保存这个PID,并在需要时通过kill PIDkill -9 PID(如果你需要强制kill的话)使用它来kill进程。或者,你可以稍后通过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)。它需要&1,以便shell知道它是该上下文中的文件描述符,而不仅仅是名为1的文件。需要2>&1来捕获通常写入标准错误的任何错误消息到我们的my.log文件(来自标准输出)。有关使用shell处理I/O重定向的更多细节,请参阅my.log1。

如果该命令定期发送输出,您可以偶尔使用tail my.log检查输出,或者如果您想跟踪它&;live&;你可以使用tail -f my.log。最后,如果你需要终止进程,你可以通过:

kill -9 `cat save_pid.txt`
rm save_pid.txt

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

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

ps -ef

然后在第一列中找到您的用户名;我发现它有以下三次:

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

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

kill PID

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

就是这样!

我希望这个答案对一些人有用,我也是bash和SSH的新手,但在这里找到了我需要的95%的知识:)

你可以试试

kill -9 `pgrep [command name]`

假设我在后台用下面的命令运行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

工作- l应该给你nohup进程列表的pid。 轻轻地杀死他们。 ;) < / p >

这在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

僵尸进程终于停止。

我用下面的命令启动django服务器。

nohup manage.py runserver <localhost:port>

这适用于CentOS:

:~ ns$netstat -ntlp
:~ ns$kill -9 PID

假设您正在使用nohup执行java程序,您可以通过

`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}

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

nohup sh test.sh &

输出将显示进程ID,如

25013

你可以杀死它:

kill 25013

今天我遇到了同样的问题。因为是很久以前的事了,我完全忘了我在什么时候用了哪个命令。我尝试了三种方法:

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

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

这适用于mi fine在mac上

kill -9 `ps -ef | awk '/nohup/{ print \$2 }'`

关于丢失putty:通常ps ... | awk/grep/perl/...进程也会被匹配!老把戏是这样的

ps -ef | grep -i [n]ohup

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

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

我经常这样做。试试这个方法:

ps aux | grep script_Name
这里,script_Name可以是由nohup运行的任何脚本/文件。 这个命令会得到一个进程ID。然后使用这个下面的命令杀死在nohup上运行的脚本
kill -9 1787 787

其中,“1787”和“787”为问题中举例提到的“进程号”。

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

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

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

top -U用户id

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

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

$ kill -9 <PID>