UNIX Shell 실행 시 백그라운드 실행 및 Telnet 접속 해제 시도 계속 실행하도록 하는 명령
'&' 는 명령어 실행 시 백그라운드로 실행하라는 이야깁니다.
더 정확히 이야기하면 synchronous하게 waiting을 하지말고 asynchronous 실행을 하라는 이야깁니다.
nohup은 명령 실행 시 행업 시그널(HUP)을 무시하라는 이야깁니다.
nohup : 모든 정지(sighub)신호를 무시하고 지정된 명령 수행. 출력은 현재 디렉토리의 nohup.out에 추가됨
nohup.out에 기록할 수 없는 경우 $HOME/nohup.out에 추가됨
nohup 실행파일 > filename & 실행 시 filename에 추가됨
retuun value
126 : Command 매개변수에 의해 지정된 명령을 찾았으나 호출할 수 없음
127 : nohup 명령에서 오류가 발생했건 Command 매개변수에 의해 지정된 명령을 찾을 수 없음
그 외 : Command 매개변수에 의해 지정된 명령의 종료 상태
ex) #nohup 실행파일 1>/dev/null 2>&1
file descriptor : 0 (표준입력), 1 (표준출력), 2 (표준에러)
1 은 /dev/null (출력안함) 이고 2는 1(에러도 출력과 동일하게 처리) 이므로 2 도 /dev/null 즉 에러도 출력안함.
마지막 &는 백그라운드로 실행하라는 의미.
즉, 해당 실행은 백그라운드로 수행되고 어떤 출력도 나타나지 않음. nuhop.out에도 저장되지 않음.
csh(C쉘)의 경우 백그라운드로 실행하면 자동으로 행업시그널에 대해 면역이 생깁니다. 즉, 접속을 끊더라도 계속 돌아갑니다.
sh(쉘), ksh(콘쉘)의 경우 행업을 하게되면 HUP 시그널이 들어가게 되고 이 경우 접속을 끊을 경우 프로세스가 HUP시그널을 맞고 죽게됩니다.
이 문제를 해결하기 위해서는 프로세스 자체적으로 행업시그널을 처리하던지 아니면 nohup 을 사용하여 프로세스를 띄워 줘야 합니다.
nohup은 명령어 앞에, &는 명령어 뒤에 붙여주면 됩니다.
[요약]
#nohup 실행파일 1>/dev/null/ 2>&1 &
1번 (stdout)을 /dev/null로 보내고 2번(stderr)를 아까 1번으로 보냈던 곳으로 보내란 소리.
쉽게 말하면 결과값이 에러든, 정상적인 메시지 출력이든 안 보겠단 말.
'개인활동 > 잡동사니팁들' 카테고리의 다른 글
python - 나중에 공부해봐야지... (0) | 2011.09.26 |
---|---|
SIP 정의 (0) | 2011.03.20 |
unix top 메모리 해석 (0) | 2008.10.27 |
Open Source SIP stacks compared (0) | 2008.07.18 |
SIP protocol (0) | 2007.05.29 |