如何获取使用 nohup 运行的程序列表
Posted
技术标签:
【中文标题】如何获取使用 nohup 运行的程序列表【英文标题】:How to get a list of programs running with nohup 【发布时间】:2013-05-24 10:23:11 【问题描述】:我正在通过 SSH 连接访问运行 CentOS(Linux 发行版)的服务器。 因为我不能一直保持登录状态,所以我使用“nohup [command] &”来运行我的程序。
我找不到如何获取我开始使用 nohup 的所有程序的列表。 “工作”仅在我注销之前有效。之后,如果我再次登录,jobs 命令什么也没有显示,但我可以在日志文件中看到我的程序仍在运行。
有没有办法获得我开始使用“nohup”的所有程序的列表?
【问题讨论】:
找到一篇可以帮助解决这个问题的优秀文章:cyberciti.biz/faq/…。最重要的是,如果您可以解释 ps 命令的输出,尤其是 stat 列,这将很有帮助。如果你不这样做,现在就去阅读这篇文章;-) 【参考方案1】:当我开始使用 $ nohup storm dev-zookeper
时,
方法1:使用jobs
,
prayagupd@prayagupd:/home/vmfest# jobs -l
[1]+ 11129 Running nohup ~/bin/storm/bin/storm dev-zookeeper &
注意:jobs
仅在启动 nohup
的同一终端会话上显示 nohup 进程。如果您关闭终端会话或尝试新会话,它将不会显示nohup
进程。首选方法2
方法2: 使用ps
命令。
$ ps xw
PID TTY STAT TIME COMMAND
1031 tty1 Ss+ 0:00 /sbin/getty -8 38400 tty1
10582 ? S 0:01 [kworker/0:0]
10826 ? Sl 0:18 java -server -Dstorm.options= -Dstorm.home=/root/bin/storm -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dsto
10853 ? Ss 0:00 sshd: vmfest [priv]
带有?
=> nohup
正在运行程序的 TTY 列。
说明
TTY 列 = 与进程关联的终端 STAT 列 = 进程状态 S = 可中断睡眠(等待事件完成) l = 是多线程的(使用 CLONE_THREAD,就像 NPTL pthread 一样)参考
$ man ps
#然后搜索/PROCESS STATE CODES
【讨论】:
方法2没有列出以nohup
启动的程序。它列出了未附加到 TTY 的进程,这是完全不同的事情:以nohup
开始的进程保持附加到其父 TTY 直到它关闭;未附加到 TTY 的进程不一定以 nohup
启动。也就是说,方法 2 列出 在其他进程中,一些以nohup
运行的程序。
jobs 对我不起作用,仅适用于同一个 ssh 会话,如果我断开连接并再次连接,它不再列出之前列出的正在运行的 nohup 进程
$ ps xw
为我工作。【参考方案2】:
您应该使用screen
,而不是nohup
。它达到了相同的结果 - 您的命令正在“分离”运行。但是,您可以恢复屏幕会话并返回其“隐藏”终端并查看该终端内的最新进展。
screen
有很多选择。我最常使用这些:
启动第一个屏幕会话或接管最近分离的一个:
screen -Rd
要从当前会话中分离:Ctrl+ACtrl+D
您还可以启动多个屏幕 - 阅读文档。
【讨论】:
对我来说似乎是一个不错的选择。我还发现我可以找到带有“ps auwx”的 PID 问题清楚地问有没有办法获得我开始使用“nohup”的所有程序的列表?,但这个答案甚至没有稍微解决这个问题.为什么会被接受? 因为早在 2013 年,这是唯一有帮助的答案。【参考方案3】:如果您有标准输出重定向到“nohup.out”,只需查看谁使用此文件
lsof | grep nohup.out
【讨论】:
这是一个聪明的方法。但就我而言,这不会返回任何结果。虽然我确定 nohup 命令仍在运行,并且它正在使用 nohup.out 文件。 所有TTY都可以,但是每个nohup都显示双进程! @NabiK.A.Z.来自man lsof
:“一般线程和任务会继承调用者的文件,但可能会关闭一些并打开其他文件,因此 lsof 总是报告所有打开的线程和任务文件。”我在它的 man 中找不到关于 nohup 的信息,但它似乎使用了两个线程,而不是一个。
如果输出重定向到一些其他文件将不起作用【参考方案4】:
您无法准确获取以nohup
开头的命令列表,但您可以使用命令ps x
查看它们以及其他进程。以nohup
开头的命令将在 TTY 列中带有问号。
【讨论】:
"ps x" 没有帮助,但我发现 "ps auxw" 有帮助。【参考方案5】:您也可以只使用 top 命令,您的用户 ID 将指示正在运行的作业及其时间。
$ top
(这将显示所有正在运行的作业)
$ top -U [user ID]
(这将显示特定于用户 ID 的作业)
【讨论】:
此外,这样做的好处是它会留在您的控制台上,这样您就可以观看工作并知道它何时完成以上是关于如何获取使用 nohup 运行的程序列表的主要内容,如果未能解决你的问题,请参考以下文章
markdown 如何在不获取nohup.out的情况下使用nohup命令?
sh 如何在不获取nohup.out的情况下使用nohup命令?