bash 셸 은 프로그램 이 Linux 터미널 배경 에서 실행 하도록 하 는 명령 입 니 다.
1. 왜 프로그램 을 배경 에서 실행 합 니까?
우리 가 계산 하 는 프로그램 은 모두 주기 가 매우 길 어서 보통 몇 시간, 심지어 일주일 이 걸린다.우리 가 사용 하 는 환경 은
putty
원 격 으로 일본 Linux
서버 에 연결 하 는 것 이다.그래서 프로그램 을 백 스테이지 에서 뛰 게 하 는 것 은 다음 과 같은 세 가지 장점 이 있다.1: 우리 쪽 이 꺼 져 있 는 지 여 부 는 일본 쪽 의 프로그램 운행 에 영향 을 주지 않 습 니 다.(예전 처럼 우리 네트워크 가 끊 기거 나 꺼 지면 프로그램 이 끊 기거 나 데 이 터 를 찾 지 못 해 며칠 동안 뛰 었 던 프로그램 이 다시 시작 할 수 밖 에 없어 고민 입 니 다)
2: 계산 효율 에 영향 을 주지 않 음
3: 프로그램 이 백 스테이지 에서 달리 면 터미널 을 차지 하지 않 고 터미널 로 다른 일 을 할 수 있 습 니 다.
2. 어떻게 프로그램 을 배경 에서 실행 합 니까?
방법 은 매우 많은 데, 여 기 는 주로 두 가 지 를 열거한다.만약 에 우리 가 프로그램
pso.cpp
이 있다 면 컴 파일 을 통 해 실행 가능 한 파일 pso
을 만 들 고 pso
서버 배경 에서 실행 하도록 해 야 합 니 다.클 라 이언 트 가 꺼 진 후에 서버 에 다시 로그 인 한 후에 원래 터미널 에서 출력 한 운행 결 과 를 계속 봅 니 다.(작업 이 현재 디 렉 터 리 에 있다 고 가정 합 니 다)방법 1 터미널 에 명령 입력:
$ ./pso > log.file 2>&1 &
설명:
linux
을 배경 에 직접 놓 고 실행 하고 터미널 출력 을 현재 디 렉 터 리 에 있 는 pso
파일 에 저장 합 니 다.클 라 이언 트 가 꺼 진 후 서버 에 다시 로그 인 한 후
log.file
파일 을 직접 보면 실행 결 과 를 볼 수 있 습 니 다 (명령: $pso.file
.방법 2 터미널 에 명령 입력:$ nohup ./pso > pso.file 2>&1 &
설명:
cat pso.file
끊 지 않 고 nohup
백 엔 드 에 직접 놓 고 실행 하고 터미널 출력 을 현재 에 저장 합 니 다.디 렉 터 리 에 있 는
pso
파일 중.클 라 이언 트 가 꺼 진 후 서버 에 다시 로그 인 한 후 직접 보기 pso.file
파일 은 실행 결 과 를 볼 수 있 습 니 다 (명령: pso.file
.3. 상용 임무 관리 명령
$ jobs // , n
$ bg %n // n
$ fg %n // n
$ ctrl+z //
$ ctrl+c //
주: 그저께 임 무 를 백 엔 드 에 두 고 실행 하려 면 먼저
#cat pso.file
이 임 무 를 걸 고 ctrl+z
백 엔 드 로 실행 해 야 합 니 다.첨부: bg
에서 프로 세 스 를 배경 에서 실행 시 키 려 면 일반적인 상황 에서 명령 뒤에 Linux
를 추가 하면 됩 니 다. 실제로 명령 을 작업 대기 열 에 넣 습 니 다.$ ./test.sh &
[1] 17208
$ jobs -l
[1]+ 17208 Running ./test.sh &
프론트 데스크 에서 실 행 된 명령 에 대해 서 는 백 스테이지 에 다시 실행 할 수 있 습 니 다. 먼저
&
를 누 르 면 실 행 된 프로 세 스 를 중단 한 다음 ctrl+z
명령 을 사용 하여 중 단 된 작업 을 백 스테이지 로 실행 합 니 다.$ ./test.sh
[1]+ Stopped ./test.sh
$ bg %1
[1]+ ./test.sh &
$ jobs -l
[1]+ 22794 Running ./test.sh &
그러나 위 에서 배경 으로 실행 되 는 프로 세 스 와 같이 부모 프로 세 스 는 현재 터미널
bg
의 프로 세 스 입 니 다. 부모 프로 세 스 가 종료 되면 shell
신 호 를 모든 하위 프로 세 스에 보 내 고 하위 프로 세 스 가 받 은 hangup
후에 도 종 료 됩 니 다.프로 세 스 를 종료 hangup
할 때 계속 실행 하려 면 shell
신 호 를 무시 하거나 nohup
부모 프로 세 스 를 hangup
프로 세 스 (프로 세 스 번호 setsid
로 설정 해 야 합 니 다.$ 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
위의 시험 은 사용
init
과 1
프로 세 스 를 배경 에서 실행 시 키 는 동시에 현재 nohup/setsid
의 종료 에 영향 을 받 지 않 는 다 는 것 을 보 여 주 었 다.그럼 배경 에서 실행 중인 프로 세 스에 대해 서 는 어떻게 해 야 하나 요?사용 가능 &
명령:$ ./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
프로 세 스 를 하나의
shell
에서 실행 하 더 라 도 disown
과 는 다른 방법 이 있다.방법 은 간단 합 니 다. 명령 을 괄호 () 로 묶 으 면 됩 니 다.$ (./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
주의: 본 논문 의 시험 환경 은
subshell
이 고 setsid
은 Red Hat Enterprise Linux AS release 4 (Nahant Update 5)
이 며 서로 다른 shell
과 /bin/bash
명령 이 다 를 수 있 습 니 다.예 를 들 어 OS
의 shell
는 없 지만 AIX
을 사용 하여 같은 효 과 를 얻 을 수 있다.또 하나의 더 강력 한 방법 은
ksh
을 사용 하 는 것 이다. 먼저 차단 모드 의 가상 단말 기 를 만 든 다음 에 disown
옵션 으로 이 가상 단말 기 를 다시 연결 하 는 것 이다. 그 중에서 실 행 된 모든 명령 은 nohup -p PID
의 효 과 를 얻 을 수 있다. 이것 은 여러 개의 명령 이 배경 에서 연속 으로 실 행 될 때 비교적 편리 하 다.$ 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.