나는 ^z; bg; disown
매우 중요한 장기 실행 프로세스를 실행하는 ssh 세션을 닫을 수 있도록 시퀀스를 발행했습니다 . 이 프로세스는 상태 출력을 stderr에 기록하며 분리 된 후에도 계속 수행됩니다 (lsof로 확인되면 stderr fd는 r / w에 대해 열려 있음).
프로세스가 실제로 제거되었는지 확인하는 방법이 있습니까?
나는 ^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
및 기타 프로세스보기 유틸리티.
작업이 폐기 된 후 자연스럽게 종료 될 때까지 기다리거나 kill
PID를 통해 신호를 보내 중지 할 수 있습니다.
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
같은 잠재적으로 오래 실행되는 명령을 실행 한 후 종료하지 않고 로그 아웃해야한다고 결정한 경우 에만 사용 합니다. 명령을 실행하고 로그 아웃한다는 것을 알고 있다면 파일을 파이프로 연결하거나 파일로 실행 하거나로 실행하거나 실행 하여 출력을 캡처 할 수 있습니다 (이후에 명령의 소유권을 다시 얻거나 종료 할 수 있음) ).rsync
cp
tee
nohup
screen
예 :
# 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
detach
백그라운드 작업에서 실행하면 분리됩니다 :) 백그라운드 프로세스에서 작업을 수행해도 아무런 영향을 미치지 않는 중간 지점이 없습니다. 확인 jobs
은 중지 된 프로세스 또는 무언가를 분리하려고 시도하지 않았 음을 확인합니다.