현재 명령으로 인해 이전 명령이 종료되는 이유는 무엇입니까?

현재 명령으로 인해 이전 명령이 종료되는 이유는 무엇입니까?

내 .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를 두 번째로 실행하세요.

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'

두 번째 명령을 실행하면 첫 번째 명령이 종료됩니다.
왜?
이제 명령을 실행하십시오.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. 다음 명령(모든 명령 sscd)을 실행합니다.
  5. 쉘은 다음 프롬프트를 인쇄하고, 이 작업을 수행하고 있으므로 완료된 작업에 대한 종료 메시지를 인쇄합니다...

를 실행하면 실제로 무슨 일이 일어나는지 확인할 수 있으므로 set -b셸은 완료된 작업의 종료 상태를 인쇄하기 전에 프롬프트를 기다리지 않습니다.

관련 정보