거부 명령 확인 발행했습니다 . 이 프로세스는 상태

나는 ^z; bg; disown매우 중요한 장기 실행 프로세스를 실행하는 ssh 세션을 닫을 수 있도록 시퀀스를 발행했습니다 . 이 프로세스는 상태 출력을 stderr에 기록하며 분리 된 후에도 계속 수행됩니다 (lsof로 확인되면 stderr fd는 r / w에 대해 열려 있음).

프로세스가 실제로 제거되었는지 확인하는 방법이 있습니까?



답변

배쉬에서 disown자체 발행 명령을 (를 통해 백그라운드로 제거 bg또는 &활성 작업 테이블에서) 프로세스를 로그 아웃에 SIGHUP을받지 그들을 표시합니다.

와 같이 하나 이상의 작업을 전달 해제 할 수도 있습니다 disown 1 3. disown -h플래그는 표에 일자리를 유지하려는 경우 유용하지만, 여전히 로그 아웃에 SIGHUP 없습니다.

jobs명령 을 실행하여 작업 테이블을 볼 수 있습니다 . 성공적인 배경 후에는이 표시 [1]+ command &됩니다. 작업을 폐기 한 후에는 더 이상 작업 테이블에 표시되지 않으며 로그 아웃시 더 이상 종료되지 않아야합니다. 당신은 여전히 통해 프로세스를 볼 수 있습니다 ps ux, top및 기타 프로세스보기 유틸리티.

작업이 폐기 된 후 자연스럽게 종료 될 때까지 기다리거나 killPID를 통해 신호를 보내 중지 할 수 있습니다.

Bash는 종료 할 실행중인 작업 목록에서 작업을 제거하고 터미널의 stdout 및 stderr에 대한 파일 핸들이 여전히 열려 있기 때문에 터미널 장치가 닫힐 때까지 작업에서 출력을 계속받습니다 (로그 아웃 할 때) .

예 :

# we start a command in the background
$ cat /dev/urandom > test &
[1] 18533

# we see our command is still running
$ jobs
[1]+  Running                 cat /dev/urandom > test &

# we disown the backgrounded job
$ disown 1

# notice it is no longer in the job table
$ jobs

나는 일반적으로 or 와 disown같은 잠재적으로 오래 실행되는 명령을 실행 한 후 종료하지 않고 로그 아웃해야한다고 결정한 경우 에만 사용 합니다. 명령을 실행하고 로그 아웃한다는 것을 알고 있다면 파일을 파이프로 연결하거나 파일로 실행 하거나로 실행하거나 실행 하여 출력을 캡처 할 수 있습니다 (이후에 명령의 소유권을 다시 얻거나 종료 할 수 있음) ).rsynccpteenohupscreen

예 :

# capture stdout and stderr to separate logs
cat /dev/urandom >stdout.log 2>stderr.log

# capture stdout and stderr to the same log, and display to stdout as well
cat /dev/urandom 2>&1 | tee output.log

# run a command under nohup (doesn't require a disown or job control support)
nohup cat /dev/urandom </dev/null


답변