如何获取进程 ID 来终止 nohup 进程?[关闭]
- 2024-10-22 08:28:00
- admin 原创
- 109
问题描述:
我在服务器上运行 nohup 进程。当我尝试终止它时,我的 putty 控制台反而关闭了。
这是我尝试查找进程 ID 的方法:
ps -ef |grep nohup
这是杀死的命令
kill -9 1787 787
解决方案 1:
当使用nohup
并将任务置于后台时,后台操作符 ( &
) 将在命令提示符下为您提供 PID。如果您计划手动管理进程,则可以保存该 PID,并在需要时通过kill PID
或使用它来终止进程kill -9 PID
(如果您需要强制终止)。或者,您可以稍后通过 找到 PID ps -ef | grep "command name"
,然后从那里找到 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 重定向。
如果命令定期发送输出,您可以偶尔使用 检查输出tail my.log
,或者如果您想“实时”跟踪它,则可以使用tail -f my.log
。最后,如果您需要终止该进程,您可以通过以下方式执行:
kill -9 `cat save_pid.txt`
rm save_pid.txt
解决方案 2:
我在 VPS 服务器上使用 red hat linux(并通过 SSH - putty),对于我来说以下方法有效:
首先,列出所有正在运行的进程:
ps -ef
然后在第一列中找到您的用户名;我发现了以下三次:
一个是 SSH 连接
第二个是 FTP 连接
最后一个是 nohup 进程
然后在第二列中您可以找到 nohup 进程的 PID,只需输入:
kill PID
(当然用 nohup 进程的 PID 替换 PID)
就是这样!
我希望这个答案对那些我对 bash 和 SSH 也很陌生的人有用,但在这里找到了我需要的 95% 的知识:)
解决方案 3:
假设我使用以下命令在后台运行 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
解决方案 4:
jobs -l应该为您提供 nohup 进程列表的 pid。轻轻地杀死(-9)它们。;)
解决方案 5:
你可以尝试
kill -9 `pgrep [command name]`
解决方案 6:
假设你正在使用 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}
解决方案 7:
如果您的应用程序总是使用相同的端口,您可以像这样终止该端口中的所有进程。
kill -9 $(lsof -t -i:8080)
解决方案 8:
这适用于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
僵尸进程终于停止了。
解决方案 9:
当您在 nohup 中创建一个作业时,它会告诉您进程 ID!
nohup sh test.sh &
输出将显示进程 ID,例如
25013
然后你就可以杀死它了:
kill 25013
解决方案 10:
我使用以下命令启动了 django 服务器。
nohup manage.py runserver <localhost:port>
这在 CentOS 上有效:
:~ ns$netstat -ntlp
:~ ns$kill -9 PID
解决方案 11:
ps -ef | grep <file_type>| grep <username>
例如,如果您正在运行 Python 文件,请使用以下命令:
ps -ef | grep python | grep user_name
它将列出您启动的所有 python 进程。现在您可以终止这些进程,如下所示:
kill -9 <p_id>
解决方案 12:
这在 Mac 上对我很好
kill -9 `ps -ef | awk '/nohup/{ print $2 }'`
解决方案 13:
我经常这样做。试试这个方法:
ps aux | grep script_Name
这里,script_Name可以是任何由nohup运行的脚本/文件。此命令会为您获取一个进程 ID。然后使用下面的命令终止在 nohup 上运行的脚本。
kill -9 1787 787
这里,1787 和 787 是问题中提到的进程 ID。这应该可以实现问题中想要实现的功能。
解决方案 14:
如果你不知道 PID,那么首先使用 TOP 命令找到它
顶部 -U 用户 ID
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
您将使用 top 获取 PID,然后执行 kill 操作。
$ kill -9 <PID>
解决方案 15:
今天我遇到了同样的问题。而且因为时间太久了,我完全忘记了当时用了哪个命令以及什么时候用了哪个命令。我尝试了三种方法:
使用命令中显示的 STIME
ps -ef
。这显示了您启动进程的时间,并且很可能您在关闭 ssh 之前执行了 nohup 命令(取决于您)。不幸的是,我不认为最新命令是我使用 nohup 运行的命令,所以这对我来说不起作用。第二个是 PPID,也在
ps -ef
命令中显示。它表示父进程 ID,即创建该进程的进程 ID。对于使用 nohup 运行的进程,ubuntu 中的 ppid 为 1。然后您可以使用它ps --ppid "1"
来获取列表,并检查 TIME(进程使用的总 CPU 时间)或 CMD 来查找进程的 PID。如果进程占用了某些端口,则使用
lsof -i:port
,您将获得命令。然后就像上面的答案一样,使用ps -ef | grep command
,您将获得 PID。
一旦找到进程的 PID,就可以用kill pid
它终止该进程。
解决方案 16:
关于丢失putty
:通常这个ps ... | awk/grep/perl/...
过程也会被匹配!所以老派的技巧是这样的
ps -ef | grep -i [n]ohup
这样,正则表达式搜索就与正则表达式搜索过程不匹配!
解决方案 17:
如果您在远程服务器上,请使用 检查内存使用情况top
,并找到您的进程及其 ID。之后,只需执行kill [your process ID]
。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件