프로그램 을 Linux 배경 에서 실행 합 니 다.

4405 단어
출처:http://www.cnblogs.com/xianghang123/archive/2011/08/02/2125511.html
1. 왜 프로그램 을 배경 에서 실행 합 니까?
우리 가 계산 하 는 프로그램 은 모두 주기 가 매우 길 어서 보통 몇 시간, 심지어 일주일 이 걸린다.우리 가 사용 하 는 환경 은 putty 로 일본 리 눅 스 서버 에 원 격 으로 연결 하 는 것 이다.그래서 프로그램 을 백 스테이지 에서 뛰 게 하 는 것 은 다음 과 같은 세 가지 장점 이 있다.
1: 우리 쪽 이 꺼 져 있 는 지 여 부 는 일본 쪽 의 프로그램 운행 에 영향 을 주지 않 습 니 다.(예전 처럼 우리 네트워크 가 끊 기거 나 꺼 지면 프로그램 이 끊 기거 나 데 이 터 를 찾 지 못 해 며칠 동안 뛰 었 던 프로그램 이 다시 시작 할 수 밖 에 없어 고민 입 니 다)
2: 계산 효율 에 영향 을 주지 않 음
2: 프로그램 이 백 스테이지 에서 달리 면 터미널 을 차지 하지 않 고 터미널 로 다른 일 을 할 수 있 습 니 다.
2. 어떻게 프로그램 을 배경 에서 실행 합 니까?
방법 은 매우 많은 데, 여 기 는 주로 두 가 지 를 열거한다.만약 우리 에 게 pso. cpp 프로그램 이 있다 면, 컴 파일 을 통 해 실행 가능 한 파일 pso 가 생 긴 다 면, 우 리 는 pso 를 Liux 서버 배경 에서 실행 하도록 해 야 합 니 다.클 라 이언 트 가 꺼 진 후에 서버 에 다시 로그 인 한 후에 원래 터미널 에서 출력 한 운행 결 과 를 계속 봅 니 다.(작업 이 현재 디 렉 터 리 에 있다 고 가정 합 니 다)
방법 1 터미널 에 명령 입력:
 # ./pso > pso.file 2>&1 & 
설명: pso 를 배경 에 직접 놓 고 실행 하고 터미널 출력 을 현재 디 렉 터 리 에 있 는 pso. file 파일 에 저장 합 니 다.
      클 라 이언 트 가 꺼 진 후 서버 에 다시 로그 인 한 후 pso. file 파일 을 직접 보면 실행 결 과 를 볼 수 있 습 니 다.
명령:\# cat pso. file ).
  
방법 2 터미널 에 명령 입력:
# nohup  ./pso > pso.file 2>&1 &
설명: nohup 은 끊 지 않 는 다 는 뜻 으로 pso 를 배경 에 직접 놓 고 실행 하고 터미널 출력 을 현재 에 저장 합 니 다.
디 렉 터 리 에 있 는 pso. file 파일 에 있 습 니 다. 클 라 이언 트 가 꺼 진 후 서버 에 다시 로그 인 한 후 pso. file 을 직접 봅 니 다.
파일 은 실행 결 과 를 볼 수 있 습 니 다 (명령:\# cat pso. file ).
3. 상용 임무 관리 명령
# jobs      //작업 을 보고 작업 번호 n 과 프로 세 스 번 호 를 되 돌려 줍 니 다.
# bg  %n   //n 번 호 를 가 진 작업 을 배경 으로 실행 합 니 다.
# fg  %n   //n 번 호 를 가 진 작업 을 프론트 데스크 톱 으로 돌려 실행 합 니 다.
# ctrl+z    //현재 퀘 스 트 걸 기
# ctrl+c    //현재 퀘 스 트 종료
 
주: 그저께 작업 을 백 엔 드 로 실행 하려 면 먼저 ctrl + z 로 이 작업 을 걸 고 bg 로 백 엔 드 로 실행 해 야 합 니 다.
 
 
 
첨부:
 
 
Linux 에서 프로 세 스 를 배경 에서 실행 시 키 려 면 일반적인 상황 에서 명령 뒤에 & 를 추가 하면 됩 니 다. 실제로 명령 을 작업 대기 열 에 넣 는 것 입 니 다.
$ ./test.sh &
[1] 17208

$ jobs -l
[1]+ 17208 Running                 ./test.sh &

프론트 데스크 에서 실 행 된 명령 에 대해 서 는 백 엔 드 로 다시 실행 할 수 있 습 니 다. 먼저 ctrl + z 를 누 르 면 실 행 된 프로 세 스 를 중단 한 다음 bg 명령 을 사용 하여 중 단 된 작업 을 백 엔 드 로 실행 합 니 다.
$ ./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

좋은 웹페이지 즐겨찾기