私の.bashrcに
alias ss="sudo sh -c '/usr/bin/nohup /usr/local/bin/sslocal -c /etc/ss.json > /var/log/ss.log 2>&1' & "
初めてssを実行します。
debian9@hwy:~/workspace$ ss
[1] 9710
ssを2番目に実行します。
debian9@hwy:~/workspace$ ss
[2] 9728
[1] Exit 1 sudo sh -c '/usr/bin/nohup /usr/local/bin/sslocal -c /etc/ss.json > /var/log/ss.log 2>&1'
2番目のコマンドを実行すると、1番目のコマンドが終了します。
なぜ?
次に、コマンドを実行します。cd
debian9@hwy:~/workspace$ cd
[2]+ Exit 1 sudo sh -c '/usr/bin/nohup /usr/local/bin/sslocal -c /etc/ss.json > /var/log/ss.log 2>&1' (wd: ~/workspace)
(wd now: ~)
なぜcd
終了につながるのですss
か?
ベストアンサー1
これは、見積メッセージが表示されたときにシェルが完了したジョブに関する情報のみを出力するために得られる印象です。例えばこれbash
マンページ:
ジョブの状態が変わるたびに、シェルはすぐに学習します。通常
bash
、他の出力を中断しないように、ジョブ状況の変更を報告するように求めるメッセージが表示されるまで待ちます。組み込みコマンドのオプションが有効になっている場合、-b
これらの変更はすぐに報告されます。終了するサブプロセスごとに、すべてのトラップが実行されます。set
bash
SIGCHLD
それで何が起こりますか?
ss
バックグラウンドで実行を開始します。- シェルは次のプロンプトを出力します。
- バックグラウンド操作は完了しましたが、シェルはまだ何も出力していません。
- 次のコマンド(すべてのコマンド
ss
などcd
)を実行します。 - シェルは次のプロンプトを印刷し、これを実行しているため、完了したジョブの終了メッセージを印刷します。
を実行すると、実際に何が起こるかを確認できるため、set -b
シェルは完了したジョブの終了ステータスを印刷する前にプロンプトを待ちません。