중지 된 작업이 있습니다 (bash 종료시)


157

There are stopped jobs.bash 쉘을 종료하려고 할 때 메시지가 나타납니다. python 2.x에서 재현 가능한 시나리오는 다음과 같습니다.

  • ctrl+ c는 인터프리터에서 예외로 처리합니다.
  • ctrl+ z프로세스를 '중지'합니다.
  • ctrl+ d실수로 파이썬을 종료합니다.

다음은 실제 터미널 출력입니다.

example_user@example_server:~$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

ctrl+z

[1]+  Stopped                 python
example_user@example_server:~$ exit
logout
There are stopped jobs.

Bash가 종료되지 않았으므로 exitbash 쉘을 종료 해야 합니다.

  • Q : '정지 된 직업'이란 무엇입니까?
  • Q : 중지 된 프로세스를 재개 할 수 있습니까?
  • Q : 처음 exit중지 된 작업을 종료합니까?
  • Q : 처음으로 쉘을 종료하는 방법이 있습니까? ( exit두 번 입력하지 않고 )

ctrl + shift + \도 파이썬을 종료합니다.
ThorSummoner

답변:


205

중지 된 작업은 일시적으로 백그라운드에 놓이고 더 이상 실행되지 않지만 여전히 리소스 (예 : 시스템 메모리)를 사용하는 작업입니다. 해당 작업이 현재 터미널에 연결되어 있지 않으므로 출력을 생성 할 수없고 사용자로부터 입력을받지 않습니다.

jobsbash 에서 builtin 명령을 사용하여 실행중인 작업을 볼 수 있습니다 . 아마 다른 쉘도 가능합니다. 예:

user@mysystem:~$ jobs
[1] + Stopped                python
user@mysystem:~$ 

fg(전경) bash 내장 명령 을 사용하여 중지 된 작업을 재개 할 수 있습니다 . 여러 명령이 중지 된 경우을 사용하여 명령 행에서 jobspec 번호를 전달하여 다시 시작할 명령을 지정해야합니다 fg. 하나의 프로그램 만 중지 된 경우 fg단독으로 사용할 수 있습니다 .

user@mysystem:~$ fg 1
python

이 시점에서 파이썬 인터프리터로 돌아 왔고 control-D를 사용하여 종료 할 수 있습니다.

반대로, killjobspec 또는 PID로 명령 을 사용할 수 있습니다 . 예를 들어 :

user@mysystem:~$ ps
  PID TTY          TIME CMD
16174 pts/3    00:00:00 bash
17781 pts/3    00:00:00 python
18276 pts/3    00:00:00 ps
user@mysystem:~$ kill 17781
[1]+  Killed                  python
user@mysystem:~$ 

jobspec을 사용하려면 숫자 앞에 퍼센트 (%) 키를 붙입니다.

user@mysystem:~$ kill %1
[1]+  Terminated              python

작업이 중지 된 상태에서 종료 명령을 실행하면 본 경고가 표시됩니다. 안전을 위해 작업이 계속 실행됩니다. 그것은 당신이 당신이 멈춘 것을 잊었을지도 모르는 직업을 죽이려고한다는 것을 알고 있는지 확인하는 것입니다. exit 명령을 두 번째로 사용하면 작업이 종료되고 쉘이 종료됩니다. 이런 방식으로 종료되지 않는 일부 프로그램에는 문제가 발생할 수 있습니다.

bash에서는 logout중지 된 프로세스를 종료하고 종료 하는 명령을 사용할 수 있습니다 . 원치 않는 결과가 발생할 수 있습니다.

또한 이런 방식으로 종료 될 때 일부 프로그램이 종료되지 않을 수 있으며, 그렇게하는 습관을들이는 경우 시스템은 리소스를 사용하여 많은 고아 프로세스로 끝날 수 있습니다.

사용자 입력이 필요한 경우 중지되는 백그라운드 프로세스를 작성할 수 있습니다.

user@mysystem:~$ python &
[1] 19028
user@mysystem:~$ jobs
[1]+  Stopped                 python

Ctrl-z인터럽트로 중지 한 작업과 동일한 방식으로 이러한 작업을 재개 및 종료 할 수 있습니다 .


4
나는 당신의 두 번째 문장으로 퀴즈합니다. 그것은 "작업이 있기 때문에, 말을해야 중지 , 그것은 걸릴 수 있는 작업입니다. - 파일 I / O, 네트워크 I / O 터미널 I / O, 또는 기타 처리를"
스콧

2
이것은 나를 많이 도와줍니다.
shellbye

어느 누구에게나 훌륭한 게시물 큰 도움이!
George Udosen

18

Q : '정지 된 직업'이란 무엇입니까?

중지 된 작업은 키보드 (일시 중지 문자 ), 명령 (예 :) 또는 다른 프로세스 (예 : 시스템에 자원이 부족한 경우 커널 )에서 중지 신호 ( SIGSTOP/ SIGTSTP) 를 수신 하여 일시 정지 상태에있는 프로세스를 의미하므로 시스템이 중지 / 일시 중지하도록 지시합니다. 프로세스는 실행 / 처리를 수행하지 않습니다.Ctrl-Zkill -STOP [PID]

활성 쉘 작업은 다음에 의해 나열 될 수 있습니다 jobs.

Q : 중지 된 프로세스를 재개 할 수 있습니까?

중지 된 프로세스는 SIGCONT신호 가 전송 된 경우에만 실행을 재개합니다 . 이에 의해 중 하나에 의해 달성 될 수있다 fg(또는 fg ID), 그것은 현재 작업하고 포 그라운드로 작업을 이동하는 bg, 또는 전송하여 백그라운드로 계속 SIGCONT신호 (예를 kill -CONT [PID]).

Q : 첫 번째 엑시트가 중지 된 작업을 종료합니까?

exit/ 를 입력 logout하거나 누를 Ctrl-D때 셸은 터미널과 관련된 현재 활성 작업에 대한 경고 메시지를 인쇄하므로 작업을 다시 확인하여 권한이없는 작업을 종료하지 않습니다. 경우 checkjobs옵션 (사용 가능 shopt -s checkjobs), 그것은 또한 자신의 상태와 작업을 나열 할 수 있습니다.

Q : 처음으로 쉘을 종료하는 방법이 있습니까? (출구를 두 번 입력하지 않고)

Ctrl+D두 번 누르 거나 더 오래 누르고 있으면 쉘 정지 상태로 빠져 나와 현재 중지 / 실행중인 선반 작업이 빠르게 종료됩니다.

또는 disown버리거나 수동으로 죽이십시오 ( ) kill $(jobs -p).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.