我正在使用屏幕并在分离模式下在终端中运行 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
但该命令没有显示睡眠。我在这里做错了什么?
答案1
最初这也让我感到困惑。然后我重新阅读了本地screen
手册页的概要——在线手册页没有给出概要)——并注意到它说:
screen [ -options ] [ cmd [ args ] ]
...这让我相信它希望将cmd
和args
视为独立的论点。
由于您将第一个参数作为带引号的值 - ' sleep 2m
' - 它尝试执行名为(确切地说)' ' 的命令sleep 2m
,而不是您执行的命令真的想要的,这是sleep
有自己的说法的2m
。该screen
命令成功退出(在我的测试中),但确实如此不是成功执行你的命令。
使用,而不是:
screen -d -m sleep 2m
而不是ps
,它只会显示与当前终端关联的进程(其中 SCREEN 和相关进程是不是), 使用:
ps x
这将显示它:
$ 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
# ...
答案2
使用nohup
就够了吗?它将显示在ps
屏幕中运行它可能会使进程隐藏在屏幕进程中的位置。
bash 就是一个例子。
nohup your-command &
如果您想退出此终端会话,您可能需要使用at
作业命令。
at now + 1 minute
nohup your-command &
(ctrl-d)