タスクを実行しましたが、sleep 3 &
「完了」メッセージがps
コンソールではなくコマンドの一部として表示されました。必ずしもそうではありませんps
。完了するすべてのコマンドは、sleep
最後に「完了」メッセージとともに追加の行があります。なぜそんなことですか?
オペレーティングシステムはcentos-7.0で、vagrant経由でダウンロードされます。
[vagrant@localhost ~]$ sleep 3 &
[1] 2838
[vagrant@localhost ~]$ ps
PID TTY TIME CMD
1871 pts/0 00:00:00 bash
2838 pts/0 00:00:00 sleep
2840 pts/0 00:00:00 ps
[vagrant@localhost ~]$ ps
PID TTY TIME CMD
1871 pts/0 00:00:00 bash
2841 pts/0 00:00:00 ps
[1]+ Done sleep 3
[vagrant@localhost ~]$
これにより、ls > ls.txt
「完了」メッセージがファイルに移動しなくなります。コンソールに表示されます。 3秒後にEnterを押すとメッセージが表示されます。一種のキャッシュにありますか?どうしたの?
答え1
man bash
説明する:
The shell learns immediately whenever a job changes state. Normally,
bash waits until it is about to print a prompt before reporting changes
in a job's status so as to not interrupt any other output. If the -b
option to the set builtin command is enabled, bash reports such changes
immediately. Any trap on SIGCHLD is executed for each child that
exits.
答え2
これ」完璧「メッセージは実行中のプロセスによって管理されるのではなく、独自のバックグラウンドbash
ジョブの終了を通知するためのものです。そのため、コンソールアクティビティがあるときにメッセージを提供します。
では、bash
以下を使用できます。
set +m
monitor
そのメッセージを見たくない場合は()削除してください。set -b
(notify
)メッセージがすぐに表示されます。