linux 명령 백엔드 실행 기술 정리(2)
하나 &
리눅스에서 프론트 데스크에서 어떤 작업을 실행할 때 터미널은 이 작업에 의해 차지된다.백그라운드에서 작업을 실행할 때 터미널을 차지하지 않습니다.
&
명령을 사용하여 작업을 백엔드에서 실행할 수 있습니다.실제로 이렇게 하면 명령이 작업 대기열에 배치됩니다.$ ./test.sh &
[1] 17208
$ jobs -l
[1]+ 17208 Running ./test.sh &
백그라운드에서 작업을 실행할 때 주의해야 한다. 사용자의 상호작용이 필요한 명령은 백그라운드에서 실행하지 마라. 왜냐하면 당신의 기계가 거기에서 바보같이 기다리기 때문이다.그러나 작업이 백엔드에서 실행되는 것처럼 결과를 화면에 출력해서 작업을 방해할 수 있습니다.백그라운드에서 실행되는 작업에 많은 출력이 발생할 경우 다음 방법을 사용하여 출력을 파일로 리디렉션하는 것이 좋습니다.
command >out.file 2>&1 &
위의 예에서
2>&1
는 모든 표준 출력과 오류 출력이 out.file
라는 파일로 바뀌는 것을 나타낸다.프로세스를 성공적으로 제출하면 프로세스를 감시하거나 죽일 수 있는 프로세스 번호가 표시됩니다.예:
httpd.conf
라는 파일을 찾아서 모든 표준 출력과 오류 출력을 find.dt
파일로 리디렉션합니다.# find /etc/httpd/ -name "httpd.conf" -print >find.dt 2>&1 &
[2] 7832
이 명령을 성공적으로 제출한 후, 시스템은 프로세스 번호 7832를 제시했다.
프론트 데스크톱에서 실행된 명령에 대해서도 백엔드에서 다시 실행할 수 있다. 먼저
ctrl+z
를 누르면 실행된 프로세스를 멈추고 bg
명령을 사용하면 정지된 작업을 백엔드에서 실행한다. 예를 들어 프론트 데스크톱에서 실행 중인tesh.sh 를 사용하여 ctrl+z 를 일시 중지하려면 다음과 같이 하십시오.$ ./test.sh
[1]+ Stopped ./test.sh
$ bg %1
[1]+ ./test.sh &
$ jobs -l
[1]+ 22794 Running ./test.sh &
그러나 위에서 백엔드로 실행된 프로세스와 같이 부모 프로세스는 현재 단말기 셸의 프로세스이고 부모 프로세스가 종료되면 모든 하위 프로세스에 Hangup 신호를 보내고 하위 프로세스가 Hangup을 받은 후에도 종료합니다.셸을 종료할 때 프로세스를 계속 실행하려면
nohup
hangup 신호를 무시하거나 setsid
부모 프로세스를 init 프로세스로 설정해야 합니다. (프로세스 번호는 1)$ echo $$21734
$ nohup ./test.sh &
[1] 29016
$ ps -ef | grep test
515 29710 21734 0 11:47 pts/12 00:00:00 /bin/sh ./test.sh
515 29713 21734 0 11:47 pts/12 00:00:00 grep test
$ setsid ./test.sh &
[1] 409
$ ps -ef | grep test
515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh
515 413 21734 0 11:49 pts/12 00:00:00 grep test
위의 시험은 사용
nohup/setsid
과 &
을 사용하여 프로세스를 백엔드에서 실행하고 현재 셸이 종료되는 영향을 받지 않도록 하는 것을 보여 줍니다.그러면 이미 백엔드에서 실행되고 있는 프로세스에 대해서는 어떻게 해야 합니까?disown 명령을 사용할 수 있습니다.$ ./test.sh &
[1] 2539
$ jobs -l
[1]+ 2539 Running ./test.sh &
$ disown -h %1
$ ps -ef | grep test
515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh
515 2542 21734 0 11:52 pts/12 00:00:00 grep test
프로세스를subshell에서 실행해도
setsid
이곡과 같은 방법이 있다.간단합니다. 명령을 괄호()
로 묶으면 됩니다.$ (./test.sh &)
$ ps -ef | grep test
515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh
515 12483 21734 0 11:59 pts/12 00:00:00 grep test
참고: 본 시험 환경은 Red Hat Enterprise Linux AS release 4(Nahant Update 5)이고 셸은/bin/bash이며 OS와 셸에 따라 명령이 다를 수 있습니다.예를 들어 AIX의 ksh는
disown
가 없지만 nohup -p PID
를 사용하여 disown과 같은 효과를 얻을 수 있다.그리고 더욱 강력한 방법은
screen
를 사용하는 것이다. 먼저 끊는 모드의 가상 단말기를 만들고 -r
옵션으로 이 가상 단말기를 다시 연결하면 그 중에서 실행하는 모든 명령이nohup 효과를 얻을 수 있다. 이것은 여러 명령이 백엔드에서 연속적으로 실행되어야 할 때 비교적 편리하다.$ screen -dmS screen_test
$ screen -list
There is a screen on:
27963.screen_test (Detached)
1 Socket in /tmp/uscreens/S-jiangfeng.
$ screen -r screen_test
2. nohup
프로세스를 실행하고 있고 계정을 종료할 때 프로세스가 끝나지 않을 것 같으면
nohup
명령을 사용할 수 있습니다.이 명령은 계정에서 탈퇴한 후에 상응하는 프로세스를 계속 실행할 수 있습니다.nohup은 끊지 않는다는 뜻(no hang up)이다.명령의 일반적인 형식은 다음과 같습니다. nohup conmmand &
nohup 명령을 사용하여 작업을 제출하면, 이 작업의 모든 출력은 nohup.out
라는 파일로 다시 지정됩니다. 출력 파일이 따로 지정되지 않은 경우:nohup command > myout.file 2>&1
위의 예에서 출력은
myout.file
파일로 다시 지정됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.