Linux 如何获取使用nohup运行的程序列表

Linux 如何获取使用nohup运行的程序列表,linux,shell,centos,nohup,Linux,Shell,Centos,Nohup,我正在通过SSH连接访问运行CentOS(linux发行版)的服务器。 因为我不能总是保持登录状态,所以我使用“nohup[command]&”来运行我的程序 我找不到如何获得我开始使用nohup的所有程序的列表。 “工作”只有在我注销之前才能生效。之后,如果我再次登录,jobs命令不会显示任何内容,但我可以在日志文件中看到我的程序仍在运行 有没有办法获取我开始使用“nohup”的所有程序的列表?您应该使用屏幕,而不是nohup。它实现了相同的结果-您的命令正在运行“分离”。但是,您可以恢复屏幕

我正在通过SSH连接访问运行CentOS(linux发行版)的服务器。 因为我不能总是保持登录状态,所以我使用“nohup[command]&”来运行我的程序

我找不到如何获得我开始使用nohup的所有程序的列表。 “工作”只有在我注销之前才能生效。之后,如果我再次登录,jobs命令不会显示任何内容,但我可以在日志文件中看到我的程序仍在运行


有没有办法获取我开始使用“nohup”的所有程序的列表?

您应该使用
屏幕
,而不是
nohup
。它实现了相同的结果-您的命令正在运行“分离”。但是,您可以恢复屏幕会话并返回其“隐藏”终端,查看该终端内的最新进展

屏幕
有很多选项。我经常使用这些:

要启动第一个屏幕会话或接管最近分离的会话,请执行以下操作:

screen -Rd 
要从当前会话中分离:Ctrl+ACtrl+D


您还可以启动多个屏幕-阅读文档。

您无法准确获取以
nohup
启动的命令列表,但您可以使用命令
ps x
查看这些命令以及其他进程。以nohup开头的命令将在TTY列中有一个问号。

如果您有标准输出重定向到“nohup.out”,请查看谁使用了此文件

lsof | grep nohup.out

当我开始使用nohup storm dev zookeper时

方法1:使用
作业

prayagupd@prayagupd:/home/vmfest# jobs -l
[1]+ 11129 Running                 nohup ~/bin/storm/bin/storm dev-zookeeper &
方法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] 
TTY列带有运行程序的
=>
nohup

说明

  • TTY列=与进程关联的终端
  • STAT column=进程的状态
    • S=可中断睡眠(等待事件完成)
    • l=是多线程的(使用克隆线程,就像NPTL pthreads一样)
参考


$man ps
#然后搜索
/PROCESS STATE CODES

您也可以只使用top命令,您的用户ID将指示正在运行的作业及其时间

$top

(这将显示所有正在运行的作业)

$top-U[用户ID]


(这将显示特定于用户ID的作业)

“ps x”没有帮助,但我发现“ps auxw”有帮助。对我来说似乎是个不错的选择。我还发现,我可以找到带有“ps auwx”的PID,问题清楚地问:有没有办法获得我开始使用“nohup”的所有程序的列表?但这个答案甚至没有略微解决这个问题。为什么被接受?因为在2013年,这是唯一有帮助的答案。这是一个聪明的方法。但在我的例子中,这不会返回任何结果。虽然我确信nohup命令仍然在运行,并且它使用的是nohup.out文件。在所有TTY中都可以,但是为每个nohup显示双进程@纳比克。来自
manlsof
:“一般来说,线程和任务继承调用方的文件,但可能会关闭一些并打开其他文件,因此lsof总是报告所有打开的线程和任务文件。”我在其man中找不到关于nohup的信息,但它似乎使用了两个线程,一个都没有。如果输出重定向到其他文件,则无法工作。方法2未列出使用
nohup
启动的程序。它列出了未连接到TTY的进程,这是一件完全不同的事情:从
nohup
开始的进程将一直连接到其父TTY,直到它关闭;未连接到TTY的进程不一定是用
nohup
启动的。也就是说,在其他进程中,方法2列出了使用
nohup
运行的一些程序。作业不适用于我,只适用于同一ssh会话,如果我断开连接并再次连接,它将不再列出以前列出的运行nohup进程,这样做的好处是,它会留在您的控制台上,这样您就可以查看作业并知道作业何时完成。找到一篇优秀的文章可以帮助您解决以下问题:。最重要的是,如果您可以解释ps命令的输出,尤其是stat列,那么它将非常有用。如果没有,现在就去读这篇文章;-)