我正在服务器上运行一个nohup进程。当我尝试杀死它时,我的油灰控制台会关闭。
这是我尝试查找进程ID的方法:
ps -ef |grep nohup
这是杀死的命令
kill -9 1787 787
我正在服务器上运行一个nohup进程。当我尝试杀死它时,我的油灰控制台会关闭。
这是我尝试查找进程ID的方法:
ps -ef |grep nohup
这是杀死的命令
kill -9 1787 787
Answers:
使用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
外壳程序知道它是该上下文中的文件描述符,而不只是一个名为的文件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
nohup
本身并不是打印PID,而是最终&
显示背景ls &
的PID ,例如显示正在运行的PIDls
echo $!
给了我nohup的能力,而不是产生的过程:paste.fedoraproject.org/428697/99695314
&
充当命令分隔符,因此您可以尝试sh -c "nohup my_command > my.log 2>&1 & echo $! > save_pid.txt"
。它可能有效,但是我还没有尝试过。
我在VPS服务器上(以及通过SSH-油灰)使用Red Hat Linux,对我来说,以下工作有效:
首先,列出所有正在运行的进程:
ps -ef
然后在第一列中找到您的用户名;我发现了以下三遍:
然后,在第二列中,您可以找到nohup进程的PID,您只需输入:
kill PID
(当然,用nohup进程的PID替换PID)
就是这样!
我希望这个答案对我也是bash和SSH的新手有用,但是在这里找到了我所需要的95%的知识:)
假设我正在使用以下命令在后台运行Ruby脚本
nohup ruby script.rb &
然后我可以通过指定命令名称来获得上述后台进程的pid。就我而言,命令是红宝石。
ps -ef | grep ruby
输出
ubuntu 25938 25742 0 05:16 pts/0 00:00:00 ruby test.rb
现在您可以使用kill命令轻松地终止进程
kill 25938
ps -ef
并且kill
在上面都有很好的介绍,那么新的部分是什么?
jobs -l应该为您提供nohup进程列表的pid。轻轻杀死(-9)。;)
kill -9
,除非你知道定期信号不起作用。
今天我遇到了同样的问题。而且由于已经很久了,我完全忘记了我使用了哪个命令以及何时使用。我尝试了三种方法:
ps -ef
命令中。这显示了开始过程的时间,很有可能在关闭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
用来终止该过程。
nohup
然后将其用于kill
,要么通过其命令名称在ps -ef
输出中找到进程并从中获取PID。您必须寻找命令名称,而不是nohup
。