我正在服务器上运行nohup进程。当我试图杀死它时,我的腻子控制台会关闭。
这就是我尝试查找进程ID的方法:
ps -ef |grep nohup
这是杀人的命令
kill -9 1787 787
答案 0 :(得分:292)
使用nohup
并将任务放在后台时,后台运算符(&
)将在命令提示符下为您提供PID。如果您的计划是手动管理流程,则可以保存该PID并在以后使用它来通过kill PID
或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
)。它需要&1
,以便shell知道它是该上下文中的文件描述符,而不仅仅是名为1
的文件。需要2>&1
来捕获通常写入标准错误的任何错误消息到我们的my.log
文件(来自标准输出)。有关使用shell处理I / O重定向的更多详细信息,请参阅I/O Redirection。
如果命令定期发送输出,您可以使用tail my.log
偶尔检查输出,或者如果您想“实时”关注它,则可以使用tail -f my.log
。最后,如果您需要终止该过程,可以通过以下方式执行:
kill -9 `cat save_pid.txt`
rm save_pid.txt
答案 1 :(得分:74)
我在VPS服务器上使用red hat linux(并通过SSH-putty),对我来说,以下工作:
首先,列出所有正在运行的进程:
ps -ef
然后在第一列中找到您的用户名;我发现它有以下三次:
然后在第二列中,您可以找到nohup进程的PID,并且只键入:
kill PID
(当然用nohup进程的PID替换PID)
就是这样!
我希望这个答案对于那些我也很擅长bash和SSH的人有用,但是我发现我需要95%的知识:)
答案 2 :(得分:36)
假设我在后台使用以下命令运行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
答案 3 :(得分:14)
jobs -l </ strong>应该为你提供nohup进程列表的pid。 轻轻地杀死它们(-9)。 ;)
答案 4 :(得分:5)
你可以尝试
kill -9 `pgrep [command name]`
答案 5 :(得分:4)
如果您的应用程序始终使用相同的端口,您可以像这样杀死该端口中的所有进程。
kill -9 $(lsof -t -i:8080)
答案 6 :(得分:3)
这适用于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
僵尸进程终于停止了。
答案 7 :(得分:1)
我使用以下命令启动了django服务器。
nohup manage.py runserver <localhost:port>
这适用于CentOS:
:~ ns$netstat -ntlp
:~ ns$kill -9 PID
答案 8 :(得分:1)
假设您正在使用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}
答案 9 :(得分:1)
如果你不知道PID,那么首先使用TOP命令找到它
top -U 用户 ID
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
您将使用top获取PID,然后执行kill操作。
$ kill -9 <PID>
答案 10 :(得分:0)
在nohup中创建作业时,它将告诉您进程ID!
nohup sh test.sh &
输出将为您显示进程ID,如
25013
您可以杀死它:
kill 25013
答案 11 :(得分:0)
今天我遇到了同样的问题。而且由于很久以前,我完全忘记了我使用了哪个命令以及何时使用。我尝试了三种方法:
ps -ef
命令中显示的STIME。这显示了开始过程的时间,很有可能在关闭ssh之前就没有命令(取决于您)。不幸的是,我认为最新的命令不是我使用nohup运行的命令,因此这对我不起作用。ps -ef
命令中。它表示父流程ID,即创建流程的流程ID。 ubuntu中的ppid为1,用于使用nohup运行的进程。然后,您可以使用ps --ppid "1"
来获取列表,并检查TIME(您的进程使用的总CPU时间)或CMD来查找进程的PID。lsof -i:port
,您将获得命令。然后,就像上面的答案一样,使用ps -ef | grep command
,您将获得PID。一旦找到了进程的PID,就可以使用kill pid
终止进程。
答案 12 :(得分:0)
这在Mac上可以正常运行
kill -9 `ps -ef | awk '/nohup/{ print \$2 }'`
答案 13 :(得分:0)
关于丢失putty
:通常ps ... | awk/grep/perl/...
流程也会被匹配!所以老派的招就是这样
ps -ef | grep -i [n]ohup
这样,正则表达式搜索与正则表达式搜索过程不匹配!
答案 14 :(得分:0)
如果您在远程服务器上,请使用top
检查内存使用情况,并找到您的进程及其ID。之后,只需执行kill [your process ID]
即可。
答案 15 :(得分:0)
我经常这样做。试试这个:
ps aux | grep script_Name
此处,script_Name 可以是 nohup 运行的任何脚本/文件。 此命令为您提供进程 ID。然后使用下面的命令杀死在 nohup 上运行的脚本。
kill -9 1787 787
这里,1787 和 787 是问题中提到的进程 ID 作为示例。 这应该符合问题的意图。