screenコマンドを使用したsleepコマンドはpsに表示されません

screenコマンドを使用したsleepコマンドは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

ただし、コマンドには睡眠は表示されません。私がここで何を間違っているのか?

答え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実行すると、画面プロセスでプロセスが非表示になる可能性がある画面に表示されます。

バッシュがその例です。

nohup your-command &

この端末セッションを終了するには、atjob コマンドを使用する必要があります。

at now + 1 minute

nohup your-command &

(ctrl-d)

関連情報