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


81

我正在通过SSH连接访问运行CentOS(Linux发行版)的服务器。由于无法始终保持登录状态,因此我使用“ nohup [command]&”运行程序。

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

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


找到了一篇可以解决这个问题的出色文章:cyberciti.biz/faq/…。最重要的是,如果您可以解释ps命令的输出(尤其是stat列),则将很有帮助。如果您不喜欢,请立即阅读文章;-)
jump_monkey '20

Answers:


115

当我开始时$ nohup storm dev-zookeper

方法1:使用jobs

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列=流程状态
    • S =可中断的睡眠(等待事件完成)
    • l =是多线程的(使用CLONE_THREAD,就像NPTL pthreads一样)

参考

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


5
方法2不列出以开头的程序nohup。它列出了未附加到TTY的进程,这是完全不同的事情:始于进程的进程nohup始终附加到其父TTY,直到关闭为止;未附加到TTY的进程不一定从开始nohup。也就是说,方法2除其他进程外,列出了一些使用运行的程序nohup
Arcturus B,

4
作业对我不起作用,仅适用于同一ssh会话,如果我断开连接并再次连接,它将不再列出先前列出的运行中的nohup进程
Mojimi

29

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

screen有很多选择。我最经常使用这些:

要开始第一次屏幕会话或接管最近的独立会话:

screen -Rd 

要与当前会话分离: Ctrl+ACtrl+D

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


6
似乎是我的好选择。我还发现我可以找到带有“ ps auwx”的PID
Nils De Winter

7
问题很明显地问:是否可以获取我开始使用“ nohup”的所有程序的列表?,但这个答案甚至都没有解决这个问题。为什么接受?
路加·约书亚公园

3
因为早在2013年,它是唯一有用的答案。
尼尔斯·德温

21

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

lsof | grep nohup.out

1
那是一个聪明的方法。但就我而言,这不会返回任何结果。尽管我确定nohup命令仍在运行,并且正在使用nohup.out文件。
朱利叶斯(JuliusŠ)。

1
在所有TTY中都可以,但是每个nohup都要显示双重过程!
Nabi KAZ '18

@ NabiK.AZ来自man lsof:“一般而言,线程和任务会继承调用方的文件,但可能会关闭它们并打开其他文件,因此lsof始终报告线程和任务的所有打开文件。” 我在其人中找不到有关nohup的信息,但似乎它使用了两个线程,而不是一个。
Yaroslav Nikitenko,

6

您不能完全获得以其开头的命令列表,nohup但是可以使用该命令将其与其他进程一起查看ps x。以T开头的命令nohup在TTY列中将带有问号。


3
“ ps x”没有帮助,但我发现“ ps auxw”可以。
Nils De Winter

5

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

$ top

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

$ top -U [user ID]

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


此外,这样做的
好处
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.