무한 루프의 하위 쉘에서 백그라운드 작업을 중지하는 방법은 무엇입니까?

무한 루프의 하위 쉘에서 백그라운드 작업을 중지하는 방법은 무엇입니까?

tmuxSSH를 통한 세션 에서 다음을 실행했습니다.

( \
  ( while true; do echo subsubshell1 && sleep 5; done ) & \
  ( while true; do echo subsubshell2 && sleep 10; done ) & \
  wait; \
)

다시 시작하지 않고 이 두 가지 백그라운드 작업을 어떻게 중지할 수 있나요?위의 명령을 실행하고 사용 ctrl + c하고 tmux창을 닫았습니다. 다음에 다시 실행할 때 더 쉽게 닫을 수 있도록 명령을 수정하는 방법에 대한 제안을 주시면 감사하겠습니다.

  • pkill sleep방금 루프의 다음 반복을 시작했습니다.
  • fg일자리가 없다고 하더군요
  • ctrl + c하위 쉘만 중지하고 하위 하위 쉘 및 백그라운드 명령은 중지하지 않는 것 같습니다.

답변1

루프 프로세스가 호출되고 bashsleep은 해당 하위 프로세스가 됩니다. ps다음을 사용하여 수면 프로세스의 상위 프로세스인 bash 프로세스를 확인할 수 있습니다 .

$ ps -auf
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
jesse_b    255  0.0  0.0  10172  3248 pts/0    S    20:11   0:00 -bash
jesse_b    259  0.0  0.0   7232   580 pts/0    S    20:11   0:00  \_ sleep 10
jesse_b    254  0.0  0.0  10172  3248 pts/0    S    20:11   0:00 -bash
jesse_b    258  0.0  0.0   7232   520 pts/0    S    20:11   0:00  \_ sleep 5
jesse_b     13  0.0  0.0  10172  5252 pts/0    Ss   20:05   0:00 -bash
jesse_b    265  0.0  0.0  10856  3392 pts/0    R+   20:11   0:00  \_ ps -auf

이 경우 PID 254와 255는 종료해야 하는 bash 프로세스입니다.

또는 다음을 수행하여 PID를 에코할 수 있습니다.

( 
  ( while true; do echo subsubshell1 && sleep 5; done ) & 
  pids+=($!)
  ( while true; do echo subsubshell2 && sleep 10; done ) &
  pids+=($!)
  echo "${pids[@]}"
  wait
)

관련 정보