ps 中不显示使用 screen 命令的 sleep 命令

Raj*_*jan 4 scripting gnu-screen ps

我在终端中使用屏幕和分离模式运行 sleep 命令。
一旦屏幕立即返回,我就会运行ps命令来验证睡眠是否正在运行。

$ screen -d -m 'sleep 2m'
[raj@localhost ~]$ ps
PID TTY          TIME CMD
22795 pts/0    00:00:00 bash
22869 pts/0    00:00:00 ps
Run Code Online (Sandbox Code Playgroud)

但是命令没有显示睡眠。我在这里做错了什么?

Jef*_*ler 10

这最初也让我感到困惑。然后我重新阅读了screenSYNOPSIS的本地手册页——在线手册页没有给出概要)——并注意到它说:

screen [ -options ] [ cmd [ args ] ]
Run Code Online (Sandbox Code Playgroud)

...这让我相信它希望将cmdargs视为独立的论点。

由于您将第一个参数作为带引号的值提供 - ' sleep 2m' - 它试图执行一个名为(完全)' sleep 2m'的命令,而不是您真正想要的,它sleep带有自己的参数2m. 该screen命令成功退出(在我的测试),但它并没有成功地执行你的命令。

改用:

screen -d -m sleep 2m
Run Code Online (Sandbox Code Playgroud)

而不是ps,它只会显示与当前终端关联的进程(其中 SCREEN 和相关进程不是),使用:

ps x
Run Code Online (Sandbox Code Playgroud)

这将显示它:

$ ps x
  PID TTY      STAT   TIME COMMAND
 # ...
 7514 pts/1    Ss     0:00 -bash
 7761 ?        Ss     0:00 SCREEN -d -m sleep 2m
 7762 pts/2    Ss+    0:00 sleep 2m
 7880 pts/1    R+     0:00 ps x
 # ...
Run Code Online (Sandbox Code Playgroud)