私は画面を使用しており、分離モードの端末で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 &
この端末セッションを終了するには、at
job コマンドを使用する必要があります。
at now + 1 minute
nohup your-command &
(ctrl-d)