티스토리 뷰


일반적인 프로그램의 표준출력은 현재 자신의 sh에 해당됩니다, sh은 리눅스 프로그램에 로그인 할때마다 새로운 PID를 갖고 시작되기 때문에, 현재의 sh이 아닌 곳에서 실행되는 결과는 출력이 되지 않습니다. 예를 들어, 아래와 같이 ping을 background 로 동작 시켰다고 보면,

$ ping 168.126.63.1 &

이 상태에서 계정을 로그아웃 하고 다시 콘솔에 접속하게 되면 ping에 대한 출력은 더 이상 보이지 않게 됩니다. 위에서 언급한대로 새로운 PID를 갖는 sh로 접속이 되었고 ping의 출력은 이전 PID의 sh에 출력을 하고 있기 때문인데요. 다른 예를 살펴봅시다. 

process내에서 실행되는 system 함수는 새로운 sh에 출력을 합니다. 무슨말인고 하니, 특정 프로그램에서 system 함수를 통해 임의의 Daemon을 실행하게 되면 해당 Daemon에서 찍어 놓은 debug msg들의 출력 내용은 확인이 안됩니다,(통상적으로) 자, 그렇다면 shell에 종속적이지 않은, 언제나 확인이 가능한 상태로 만드려면 어떻게 해야 할까요?

방법은 process를 시작할때 출력 내용을 콘솔로 보내 버립시다 !! (default sh) 위에서 예로 들었던 ping을 다시 한번 사용해보면,

$ ping 168.126.63.1 > /dev/console &

 위와 같은 상태로 background 돌리면 계정이 로그아웃 된 상태에도 표준출력에 대한 내용이 확인됩니다. 날카로운 분들은 눈치 챘겠지만, "표준출력"에 해당하는 내용을 console에 출력하는 것입니다. 두번째 예시처럼 임의의 Daemon에서 stderr로 출력하고 있다면

$ DaemonABC start > /dev/console 2>&1 &

 위와 같이 표준에러를 표준출력으로 변경 시켜준 내용이 console로 출력되도록 지정해 주어야 합니다.


이제 shell에 종속적이지 않은 상태의 Daemon을 만들었는데, 그렇다면 /dev/console은 무엇일까요? (/dev/null이나, 2>&1 에 대한 것은 여기 참고) /dev/console에 대한 내용은 이곳을 참고하도록 합시다.

설명을 해볼까 했으나.. 해당 내용 이상으로 설명할 자신이 없네요 :-)

 

 

 

'개발 > Linux' 카테고리의 다른 글

lighttpd.conf [cipher-list]  (0) 2011.10.10
cron  (0) 2011.09.27
/dev/null 2>&1 의미  (0) 2011.09.21
OOM killer  (0) 2011.09.21
pid의 최대값  (0) 2011.09.16
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday