Linux 如何获取进程ID以终止nohup进程?

Linux 如何获取进程ID以终止nohup进程?,linux,bash,grep,nohup,Linux,Bash,Grep,Nohup,我正在服务器上运行nohup进程。当我试图杀死它时,我的油灰控制台反而关闭了 以下是我如何尝试查找进程ID的方法: ps -ef |grep nohup 这是杀戮的命令 kill -9 1787 787 使用nohup并将任务置于后台时,后台操作员(&)将在命令提示下为您提供PID。如果您的计划是手动管理流程,则可以保存该PID,并在需要时通过kill-PID或kill-9 PID(如果需要强制kill),稍后使用它终止流程。或者,您可以稍后通过ps-ef | grep“command

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

以下是我如何尝试查找进程ID的方法:

ps -ef |grep nohup 
这是杀戮的命令

 kill -9 1787 787

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

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

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

如果该命令定期发送输出,您可以使用
tail my.log
偶尔检查输出,或者如果您想“实时”跟踪它,可以使用
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
xxxxx     9643  0.0  0.0  14232   968 pts/2   
现在,您可以使用kill命令轻松地终止进程

kill 25938

作业-l应为您提供nohup进程列表的pid。 轻轻地杀死他们。
;)

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


僵尸进程终于停止了。

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

nohup manage.py runserver <localhost:port>

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

`ps aux | grep java`
输出

ubuntu   25938 25742  0 05:16 pts/0    00:00:00 ruby test.rb
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

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

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

  • 找到进程的PID后,可以使用
    kill PID
    终止进程。

    这适用于mac上的mi fine

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

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

    ps -ef | grep -i [n]ohup 
    

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

    如果您在远程服务器上,请使用
    top
    检查内存使用情况,并找到您的进程及其ID。然后,只需执行
    kill[您的进程ID]
    ,我经常这样做。试着这样做:

    ps aux | grep script_Name
    
    在这里,脚本名称可以是nohup运行的任何脚本/文件。 此命令将为您获取进程ID。然后使用下面的命令杀死运行在nohup上的脚本

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

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

    kill-9$(lsof-t-i:8080)
    如果你