如何在“ps”或“ps -ef”命令输出中知道进程是在后台运行还是在前台运行?

K.P*_*aul 3 linux ps background-process

我如何知道进程是在命令中ps还是在后台运行或在前台运行ps -ef

我首先想到的是,当我输入时ps -ef,有一个名为 TTY 的部分。当我查看 TTY 列表时,其中大部分是?. 我想知道那个问号是否意味着进程运行后台。

我想检查我是否正确!如果没有,我想知道如何知道进程是在后台运行还是在前台运行?

附:jobs此处不使用命令。

Unc*_*lly 6

stat字段有一个额外+的前台进程

ps -e -o pid,tty,stat,cmd
Run Code Online (Sandbox Code Playgroud)

前台进程是那些进程组 id ( pgid) 是终端 ( tpgid)上的前台进程组的进程:

ps -e -o pid,pgid,tpgid,tty,cmd | awk '$2==$3'
Run Code Online (Sandbox Code Playgroud)

当我查看 TTY 列表时,大多数都是“?” (问号)不知那个问号是不是表示进程运行后台

不,这意味着它们没有控制 tty(守护进程或内核线程,既不是前台也不是后台)。有关后台进程的列表:

ps -e -o pid,pgid,tpgid,tty,cmd | awk '$3!=-1 && $2!=$3'
Run Code Online (Sandbox Code Playgroud)