我正在使用SSH连接访问运行CentOS (Linux发行版)的服务器。 由于我不能一直保持登录状态,所以我使用"nohup [command] &"来运行我的程序。
我找不到如何获取我使用nohup启动的所有程序列表。 "jobs"只在我注销前有效。之后,如果我再次登录,jobs命令将不显示任何内容,但我可以在日志文件中看到我的程序仍在运行。
是否有一种获取我使用"nohup"启动的所有程序列表的方法?
我正在使用SSH连接访问运行CentOS (Linux发行版)的服务器。 由于我不能一直保持登录状态,所以我使用"nohup [command] &"来运行我的程序。
我找不到如何获取我使用nohup启动的所有程序列表。 "jobs"只在我注销前有效。之后,如果我再次登录,jobs命令将不显示任何内容,但我可以在日志文件中看到我的程序仍在运行。
是否有一种获取我使用"nohup"启动的所有程序列表的方法?
当我开始使用$ nohup storm dev-zookeper
时,
METHOD1:使用jobs
,
prayagupd@prayagupd:/home/vmfest# jobs -l
[1]+ 11129 Running nohup ~/bin/storm/bin/storm dev-zookeeper &
注意: jobs
命令只能在启动 nohup
的终端会话中显示 nohup 进程。如果关闭该终端会话或在新的会话中尝试,它将无法显示 nohup
进程。建议使用 METHOD2。
METHOD2: 使用 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]
TTY列带有?
=> 表示没有使用nohup
运行的程序。
描述
参考资料
$ man ps
# 然后搜索/PROCESS STATE CODES
nohup
启动的程序列表。它列出的是未连接到TTY的进程,这是完全不同的事情:使用nohup
启动的进程会一直与其父TTY连接,直到TTY关闭;而未连接到TTY的进程并不一定是使用nohup
启动的。也就是说,方法2列出了除其他进程外,运行nohup
的一些程序。 - Arcturus B不要使用nohup
,而应该使用screen
。它可以实现相同的结果 - 您的命令正在运行“分离”模式。但是,您可以恢复屏幕会话并重新进入其“隐藏”的终端,并查看该终端中的最近进度。
screen
有很多选项。我经常使用以下选项:
启动第一个屏幕会话或接管最近的分离会话:
screen -Rd
要从当前会话中分离:Ctrl+ACtrl+D
您也可以启动多个屏幕 - 阅读文档。
lsof | grep nohup.out
man lsof
的说法是:“通常情况下,线程和任务会继承调用者的文件,但可能会关闭一些文件并打开其他文件,因此 lsof 总是报告线程和任务的所有打开文件。” 我在 nohup 的 man 中找不到相关信息,但它似乎使用两个线程而不是一个。 - Yaroslav Nikitenko你无法直接获取以 nohup
开头的命令列表,但是你可以通过使用命令 ps x
来查看它们和其他进程一起运行。以 nohup
开始的命令在 TTY 列中将有一个问号。
你也可以直接使用top命令,你的用户ID将指示正在运行的任务及其时间。
$ top
(这将显示所有正在运行的任务)
$ top -U [用户ID]
(这将显示特定于该用户ID的任务)
sudo lsof | grep nohup.out | awk '{print $2}' | sort -u | while read i; do ps -o args= $i; done
返回使用nohup.out文件的所有进程
根据个人经验,我更喜欢使用top
命令,更多有关如何使用top
的示例,请参见javapoint。正如用户Jcrow06已经建议的那样,运行top
将显示服务器上所有正在运行的作业,如果只对特定[userid]的作业感兴趣,可以简单地运行top -u [userid]
。
运行top
的好处是可以显示所有正在运行的进程(包括在后台启动的nohup进程),即使它们不是来自当前终端会话或其他用户。此外,通过top
可以看到任务占用了多少CPU和内存,并且已经运行了多长时间。这对于判断它是否仍在正确运行可能很有帮助。
注意:默认情况下,top
根据CPU使用率排序任务,但如果需要,可以调整排序顺序。此外,如果您注意到不需要的任务,您可以通过按下k
键后输入进程ID PID
来轻松终止它们。