이것은 작업 제어 기능이있는 모든 쉘에 해당되며, 대부분의 경우 진정한 고대 쉘을 다루지 않는 한 당연한 것으로 간주 될 수 있습니다. POSIX 표준 에 있으므로 dash
작업 제어 도 지원합니다 (대화식 또는로 실행할 때 -m
).
인터렉티브
- Ctrl+ z현재 포 그라운드 된 프로그램을 일시 중단합니다
bg
가장 최근에 정지 된 프로그램의 배경이됩니다
( bg %2
작업 번호와 함께 사용 하여 확인할 수 있음 jobs
)
fg
가장 최근에 중단 된 프로그램을 포 그라운드
에서 다른 + 를 통해 프롬프트에서 zsh
암시 적으로 실행하는 키 바인딩을 작성할 수 있습니다 .fg
Ctrlz
_zsh_cli_fg() { fg; }
zle -N _zsh_cli_fg
bindkey '^Z' _zsh_cli_fg
bg
일시 중단시 암시 적으로 실행되는 영리한 방법이있을 수도 있지만 현명하지 않은 것 같습니다. 적어도 나를 위해, 나의 Ctrl+ z사용법 의 대부분은 Ctrl+ c가 깨지지 않기 때문 입니다. 나는 그 kill %1
대신 예를 들어서 그것을 따르고 싶지만 bg
분명히 살인을 기본값으로하고 싶지 않습니다! (이 논리는 내가 더 이상 구속력이 키를 사용하지 않는 이유에 확장 : 나는에 망치있어 경우 Ctrl+ z! 프로세스를 중지, 내가이 원하는 마지막 것은 다시 시작입니다)
비 대화식
다른 셸 인스턴스 (또는 때로는 sudo
명령을 포함한 다른 사용자 )에 있다면 작업 번호를 사용하지 못할 수 있습니다.
프로세스 ID (PID)를 알고 나면 다른 프로세스에서 계속 작업 할 수 있습니다. pgrep …
, 또는 ps aux |grep …
(또는 동일한 셸 jobs -l
, 또는 $!
) 에서 PID를 얻을 수 있으며 다음을 실행할 수 있습니다.
kill -STOP $PID # suspend
kill -CONT $PID # continue (resume)
프로세스 ID를 모르고 프로세스의 다른 인스턴스를 이름으로 일시 중단 할 염려가없는 경우 다음 중 하나에 신호를 전달할 수 있습니다.
killall -STOP program_name
pkill -STOP program_name
pkill -f -STOP program_name_or_args
+ ( 'd가 아님)로 CONT
중지 된 프로그램에 대한 신호 는 마치 마치 마치 전경과 같이 진행을 다시 시작합니다 (포 그라운드에서) .Ctrlzbg
fg
다시 : 표준 오류
이 질문에 대한 편집은 표준 오류에 대해 묻습니다.
프로세스는 stderr로 출력되므로 fg <jobid>
프로세스가 터미널에 출력되는 동안 어떻게 명령 을 발행해야 합니까?
해당 작업에 백그라운드로 구성 요소가 있거나 (또는 전체 작업이 아마를 통해 백그라운드로 kill -CONT
) 구성되지 않는 한, 일시 중단 된 동안 실제로 출력을 볼 수 없습니다.
여전히 데이터를 출력하는 경우 (표준 출력 또는 표준 오류로) 터미널이 시각적으로 복잡해 지지만 입력의 일부가 아니기 때문에 모든 출력이 무시됩니다. 이렇게하면 오타를 입력하지 않은 것을 알기가 더 어려워 질 수 있지만 (맹목적으로) 타이핑 fg
Enter하면 충분합니다 (여러 개의 작업이 있고 해당 작업이 최신이 아닌 경우에는 작업 설명자가 필요합니다) ).
작업 설명자를 찾아야하는 경우 다른 터미널을 사용 STOP
하여 위의 비 대화식 방법을 통해 신호를 보내십시오 . 이렇게하면 디스플레이가 비워져 (아마도 Enter몇 번 누르 거나 실행 clear
또는 Ctrl+ L) jobs
작업 설명자를 찾기 위해 실행 한 다음 해당 번호가 fg %N
있는 곳에서 실행할 N
수 있습니다.