tmux
SSH를 통한 세션 에서 다음을 실행했습니다.
( \
( 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
루프 프로세스가 호출되고 bash
sleep은 해당 하위 프로세스가 됩니다. 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
)