“&”가없는 백그라운드 프로세스 시작했지만 “&”를 사용하지 않았다고 가정 해 봅시다.

Linux에서 텍스트 편집기와 같은 새 응용 프로그램을 시작했지만 “&”를 사용하지 않았다고 가정 해 봅시다. 해당 응용 프로그램을 닫을 필요없이 백그라운드에서 해당 프로세스를 실행하기 위해 어떤 명령을 사용 하시겠습니까? 이런 방식으로 프로세스를 열고 별도로 작동시킬 수 있습니다 (예 : 프로세스를 생성하는 데 사용한 명령 줄 터미널과 텍스트 편집기와 같은 프로세스가 여전히 실행 중임).



답변

터미널 창에서 일반적으로 Control+ Z를 입력 하여 프로세스를 “일시 중지”한 다음 bg명령을 사용하여 “배경”합니다.

예를 들어 수면 명령

$ /bin/sleep 1000
^Z[1] + Stopped                  /bin/sleep 1000
$ bg
[1]     /bin/sleep 1000&
$ jobs
[1] +  Running                 /bin/sleep 1000
$

프로세스가 실행 중이고 여전히 명령 줄이 있습니다.


답변

Ctrl+ Z는 그것을하는 방법이지만 완전성을 위해 : 질문은 “명령”을 요구하며, 그것은 (다른 터미널에서) 것입니다 :

kill -STOP pid_of_the_running_applications

그리고 물론

bg

응용 프로그램 터미널에서.


답변

배쉬에서 :

Ctrl+ Z다음 bg.

이제 실행 jobs하고 결과를 확인하십시오.


답변

CTRL– 를 눌러야하는 불편을 방지하기 위해 z편집기를 백그라운드에서 실행하는 래퍼 스크립트를 만들 수 있습니다. 이런 식으로 백그라운드에서 명시 적으로 시작하는 것을 기억할 필요가 없습니다.

    #!/bin/sh

    EDITOR="emacs" # or whatever

    if [ -z "${DISPLAY}" ]; then
      ${EDITOR} "$@"
    else
      ${EDITOR} "$@" &
    fi

위에서 우리는 먼저 X 서버를 사용할 수 있는지 확인한 다음 백그라운드에서만 편집기를 실행합니다. . "$@"래퍼 스크립트에 제공 한 것처럼 모든 인수를 선택한 편집자 ( )로 전달합니다 .

명령이 누락되었습니다 … 기본 실험에 따라 터미널이 포함되지 않은 GUI 프로그램의 경우 먼저 전송 SIGSTOP한 다음 SIGCONT포 그라운드 프로세스 로 간단 합니다 ( kill쉘 스크립트를 사용하여 구현하면 명령 사용) . 물론 다른 터미널 창 / 탭에서 실행해야하며 신호를 보내려는 PID를 편리하고 일반적인 방식으로 찾는 것이 어렵습니다. 기본적으로 주어진 이름의 모든 프로세스에 두 개의 신호를 보낼 수 있습니다 (기본적으로 즐겨 사용하는 편집기로 설정하고 PID를 인수로 사용하도록 허용).

    #!/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당신이 (공통 기본값으로)를 누르면 전경 프로세스에 전송되어 정확히 CTRLz. 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합니다.


답변