現在のコマンドで以前のコマンドが終了するのはなぜですか?

現在のコマンドで以前のコマンドが終了するのはなぜですか?

私の.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これらの変更はすぐに報告されます。終了するサブプロセスごとに、すべてのトラップが実行されます。setbashSIGCHLD

それで何が起こりますか?

  1. ssバックグラウンドで実行を開始します。
  2. シェルは次のプロンプトを出力します。
  3. バックグラウンド操作は完了しましたが、シェルはまだ何も出力していません。
  4. 次のコマンド(すべてのコマンドssなどcd)を実行します。
  5. シェルは次のプロンプトを印刷し、これを実行しているため、完了したジョブの終了メッセージを印刷します。

を実行すると、実際に何が起こるかを確認できるため、set -bシェルは完了したジョブの終了ステータスを印刷する前にプロンプ​​トを待ちません。

おすすめ記事