Linux에서 새 애플리케이션(예: 텍스트 편집기 등)을 시작했는데 "&"를 사용하는 것을 잊어버렸다고 가정해 보세요. 애플리케이션을 닫지 않고도 프로세스가 백그라운드에서 실행되도록 하려면 어떤 명령을 사용하시겠습니까? 이렇게 하면 두 개의 프로세스를 열고 독립적으로 작업할 수 있습니다(예를 들어 프로세스를 생성하는 데 사용된 명령줄 터미널과 텍스트 편집기가 계속 실행 중입니다.)
답변1
터미널 창에서는 일반적으로 Control+를 입력하여 Z프로세스를 "일시 중지"한 다음 bg
명령을 사용하여 "백그라운드"합니다.
예를 들어 sleep 명령을 사용하십시오.
$ /bin/sleep 1000
^Z[1] + Stopped /bin/sleep 1000
$ bg
[1] /bin/sleep 1000&
$ jobs
[1] + Running /bin/sleep 1000
$
프로세스가 실행 중인 것을 볼 수 있으며 여전히 명령줄이 있습니다.
답변2
Ctrl+ Z는 이를 수행하는 방법이지만 완전성을 위해 다음과 같은 "명령"을 요청하는 질문입니다. 이는 (다른 터미널에서) 다음과 같습니다.
kill -STOP pid_of_the_running_applications
그리고 물론
bg
응용 프로그램 터미널에서.
답변3
큰 타격을 받은 경우:
Ctrl+ Z그러면 bg
.
이제 실행 jobs
하고 결과를 확인해 보세요.
답변4
CTRL- 를 누르는 불편함을 피하기 위한 예방조치로 z, 편집기가 백그라운드에서 실행할 수 있도록 래퍼 스크립트를 생성할 수 있습니다. 이렇게 하면 백그라운드에서 명시적으로 시작하는 것을 기억할 필요가 없습니다.
#!/bin/sh
EDITOR="emacs" # or whatever
if [ -z "${DISPLAY}" ]; then
${EDITOR} "$@"
else
${EDITOR} "$@" &
fi
위에서 우리는 먼저 편집기를 백그라운드에서 실행하기 전에 사용 가능한 X 서버가 있는지 확인하려고 시도합니다(그렇지 않은 경우 많은 Unix 편집기가 터미널을 사용하므로 이 경우 편집기를 백그라운드 프로세스로 실행하고 싶지 않습니다). . "$@"
래퍼 스크립트에 제공한 것처럼 모든 인수를 선택한 편집기( )에 그대로 전달합니다 .
누락된 명령에 관해서는... 내 기본 실험에서 터미널을 포함하지 않는 GUI 프로그램의 경우 포그라운드 프로세스로 보내는 SIGSTOP
것만 큼 간단할 수 있습니다( 쉘 스크립트를 사용하여 이 명령을 사용하십시오). 물론 다른 터미널 창/탭에서 실행해야 하지만 일반적인 방법으로 신호를 보내려는 PID를 편리하게 찾는 것이 어렵습니다. 기본적으로 주어진 이름을 가진 모든 프로세스에 두 개의 신호를 보낼 수 있습니다(기본값은 선호하는 편집기이며 PID를 인수로 허용합니다).SIGCONT
kill
#!/bin/sh
EDITOR=emacs # whatever
stop_cont_prog()
{
case "$1" in
# begin with number is considered PID - this is not good
# enough to be taken seriously...
[1-9]*) kill -SIGSTOP "$1"; kill -SIGCONT "$2";;
*) killall -SIGSTOP "$1"; killall -SIGCONT "$2";;
esac
}
if [ -n "$1" ]; then
for prog in "$@"; do stop_cont_prog "$1"; done
else
stop_cont_prog "${EDITOR}"
fi
emacs
이 방법은 백그라운드에서 (여러) 명령을 실행한 후 터미널 탭을 올바르게 제공합니다. 그러나 쉘 작업 제어나 터미널 설정의 혼란으로 인해 터미널에서 실행 중인 emacs 프로세스가 제대로 복구되지 못했습니다. 따라서 이 접근 방식은 약간의 복잡성으로 인해 이점을 얻습니다.
이것이 바로 SIGSTOP
- (기본값)을 누를 CTRL때 포그라운드 프로세스로 전송되는 것 입니다 z. 기준 stty -a
출력
$ stty -a
speed 38400 baud; rows 50; columns 200; line = 0;
intr = ^C; [...] start = ^Q; stop = ^S; susp = ^Z; [...]
[...]
(출력 약어) 및 stty
매뉴얼 페이지:
susp CHAR
CHAR will send a terminal stop signal
신호를 사용하여 중지된 프로세스는 신호 SIGSTOP
를 보내 다시 시작할 수 있습니다 SIGCONT
. 일반적으로 셸 작업 제어 논리는 무시한 명령 과 관련된 기타 필요한 작업을 보내고 SIGCONT
처리합니다 .fg
bg