nohup 작업을 포 그라운드로 가져 오기


14

다음 nohup실행을 고려하십시오 .

nohup script.sh > script.out &

터미널을 로그 오프하고 다시 연결하고 프로세스를 다시 포 그라운드로 가져오고 키보드를 사용하여 상호 작용하는 방법이 있습니까?

답변:


7

스크립트를 시작하고 터미널을 방해하는 출력없이 스크립트를 실행 한 다음 나중에 스크립트와 상호 작용할 수 있도록하려면 터미널 멀티플렉서를 살펴볼 수 있습니다. 시스템에 따라 tmux또는 을 권장 screen합니다. 아래 링크에서 사용 방법에 대한 정보를 찾을 수 있습니다.

tmux :

화면:

편집 : TMUX 프라이머에 대한 링크 추가


+1 내가 알지 못하는 훌륭한 도구. 많은 감사합니다.
Adam Matan

19

nohup 은 터미널에서 명령의 연결을 끊지 않고 스크립트를 무시하고 파일로SIGHUP리디렉션하므로 로그 아웃 한 후에도 명령이 백그라운드에서 계속 실행될 수 있습니다.stdout/stderrnohup.out

nohup백그라운드에서 실행되는 명령을 자동으로 넣지 않습니다. 명령 줄을로 끝내면 명시 적으로 그렇게해야합니다 &.

$ nohup ./script.sh &
[1] 3390
$ nohup: ignoring input and appending output to ‘nohup.out’

jobs현재 실행중인 작업 및 상태를 인쇄 할 수 있습니다. 명령이 명령 jobs을 찾을 수 없으면 더 이상 해당 쉘 의 하위 프로세스 가 아닙니다 .

$ jobs 
[1]+  Running                 nohup ./script.sh &

fg로 실행하더라도 백그라운드 작업을 bash에서 포 그라운드로 되돌릴 수 있습니다 nohup. 그러나 출력 리디렉션nohup.out 은 변경되지 않으며 여전히 파일로 이동합니다 .

$ fg
nohup ./script.sh

쉘 / 터미널을 닫거나 로그 오프하면 명령이 더 이상 해당 쉘의 자식이 아닙니다. init프로세스에 속합니다 . 검색 pstree하면 프로세스 1 ( init)이 소유하고 있음을 알 수 있습니다. 전경이 더 이상 존재하지 않으므로 전경으로 다시 가져올 수 없습니다.


If the command jobs cannot find it, then it is no longer a child process of that shell.이것은 잘못된 것입니다.이 순서를 시도하여 방법을 확인하십시오 sleep 100 & disown ; echo Jobs:; jobs; echo Tree:; pstree -ap $$.. 이 명령 후에도 sleep생성했을 때 동일한 PID로 출력 된 작업을 볼 수 있지만 jobs아무 것도 인쇄하지 않습니다. 자식 프로세스가 자식이되는 것을 막을 수있는 유일한 방법은 부모를 잃고 (고아가 자식이 됨 init) 또는 포크 + 종료 (PID가 변경되므로 원래 자식이 아님)입니다.
Ruslan

4

두 번째로 터미널 멀티플렉서를 사용하지만 화면이 아닌 tmux를 사용하겠습니다 . 화면은 모든 의도와 목적을 위해 유지되지 않습니다. 그 구성은 어두운 예술이며 Necronomicon의 부록에 처음 기록되었을 것입니다. 자신의 설정을 작성하는 것은 Cthulu를 살짝 보여주는 것입니다. 진심으로. 사람들의 .screenrc 파일을 살펴보십시오 . 확실하게, 구성 파일의 화면 혐오를 중재하는 방법이 있습니다. Byobu 는 필사자의 사용자와 부정한 코드 사이의 베일로 훌륭한 일을합니다. 합리적인 색상, 메뉴 인터페이스 및 상태 표시 줄이 가장 중요합니다.

그러나 내가 말했듯이 대신 tmux 를 권장 합니다. 여전히 약간의 구성이 필요하지만 문서화 되어 있으며 구성 파일은 횡설수설처럼 보이지 않습니다. 또한 색상과 상태 표시 줄로 시작합니다. 내 screenrc 및 tmux.conf 파일을 비교하십시오.


0

라이브 모자 출력에 관심이 있다면 다음과 같이 출력 할 수 있습니다.

nohup script.sh 2>&1 script.out &
# later:
tail -f script.out

0

&마지막에 ' '가 추가 된 모든 Linux 명령을 백그라운드로 보낼 수 있습니다 .

모든 백그라운드 작업을 보려면 발행 할 수 있습니다 jobs

jobs
[1]  + suspended  nohup sh zookeeper-server-start.sh ../config/zookeeper.properties
[2]    running    nohup sh kafka-server-start.sh ../config/server.properties
[3]  - running    nohup sudo mongod --dbpath=/var/lib/mongodb

여기서는 백그라운드에서 zookeeper, kafka 및 mongo daemon의 3 가지 작업을 실행하고 있습니다. [1], [2] 및 [3]은 이러한 작업에 대한 작업 번호입니다.

다음을 사용하여 해당 작업을 포 그라운드로 가져올 수 있습니다 fg %$taskNumber.

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