프로그램을 백그라운드로 실행을 시키는데 문제가 좀....
글쓴이: miso / 작성시간: 월, 2003/02/10 - 11:06오전
제가 만든 서버를 백그라운드로 실행을 시키려고
nohup 실행파일 &
하면 백그라운드로 실행은 되는 데요...
nohup.out 이라는 파일이 안생겨요....
이전에 제가 자바로 서버를 만들어서... 리눅스에서 백그라운드로..
nohup java Server.class &
하면.. nohup.out 파일이 자동으로 생겨서.... 제가 프로그램 안에서..
에러가 발생하면 System.out.println으로 찍게한 내용이 nohup.out 파일에 찍혔거든요...
그런데...
이번에 C로 짠 서버에서는
nohup ./Server &
하면 백그라운드로 실행은 되는데 nohup.out 은 안생기고 제가 찍게한 에러 메세지 즉 printf으로 찍게한 메제지기 그냥 화면에 찍혀요...
그리고 시스템을 나갔다가 들어오면... 화면에 찍던 에레 메시지는 아예 찍디고 안아요...
프로그램은 돌아 가는데...
무엇이 문제 인가요...
백그라운드로 실행 시키고 printf로 찍게 한 메세지는 nohup.out 파일이나 다른 파일에 찍게 할 수 없나요..
프로그램 안에서 파일을 열어서 찍는 방법 말고요..
위에서 말씀드린.. java를 실행 실킬때 처럼 자동으로 nohup.out 파일이 생겨서 에러 메세지를 nohup.out 파일에 찍게 할 수 있는 방법은 없나요?
Forums:
redirect
./exe_cmd > xxx.log & 하세요
그렇게 해도 안되는데요.... ㅡㅡ;;
님께서 알려 주신데로...
./Server > log.out &
했는데요...
log.out 파일은 생기는데...
프로그램안에서.. printf로 찍는 메세지가... log.out 파일에 안찍히고..
바로 화면에 찍혀요...
그리고 빠져 나왔다가 들어가면.. 화면에 찍히던 메세지마져...
안찍힙니다..
이를 어찌하여야 하나요.. ㅡㅡ;;;
다른 해결 방법은 없나요?
*^^*
stdout, stderr 를 파일로 redirection 시키면 됩니다.
저기 아랫부분의 command 부분을 바꿔 주시면 사용가능합니다.
:oops:
아싸~
제가 원하는 것은.....
제가 원하는 것은요. 자바 서버 프로그램을 구동 시켰던 것처럼...
자동으로 log.out 파일에 쓰게 하는 방법을 물어 본 것인데요...
님께서 알려 주신 방법은 네가 log.out 파일을 소스 코드 상에서...
열고... 그리고 log.out 파일에 에러 메세지를 쓰고.. 그다음에 닫아 줘야하는 방법이잖아요...
자바를 실행했을때 처럼.... 자동으로 log.out 파일이 생기고 그리고 나서..
자동으로 log.out 파일에 쓰게할 수 없나요?....
꼭 소스 코드 안에서 일일이 코딩을 해줘야하나요?
아님 다른 방법이 있으면 좀 알려 주세요?
*^^*
출력을 printf(); 대신에, fprintf(stdout, ...);
출력을 printf(); 대신에, fprintf(stdout, ...); 를 쓰면 될겁니다.
그렇게 하니까 되더군요. :)
님께서 알려주신 방법으로 해보았지만....
님께서 알려주신 방법으로 printf 로찍는 메세지를 fprintf(stdout, .....) 이 함수로 전부 바꾸어서 컴파일하고 서버 프로그램을 돌려 보았는데....
그 전 상황과 똑같은데요.... ㅡㅡ;;;
하실때 특별히 다르게 지정해 주신거라도 있는지....
하루 빨리 해결을 해야하는데....
한고비 넘어가면 다른 고비가 기다리고 있으니...
코딩의 세계는 너무 험난한 것 같습니다...
*^^*
fprintf(stdout, ...);으로 바꾸고 아래처럼 실행하면.
fprintf(stdout, ...);
으로 바꾸고 아래처럼 실행하면....
./실행파일 > xxx.log
xxx.log 파일이 쌓일거예요.... 그래도 안되면....쿨럭.... ㅡ,.ㅡ;;;;
에러메시지는
에러메시지는 2> 를 사용해야 합니다.
./a.out 2> nohup.out &
그래도 안되는데요..... ㅡㅡ;;
see2000님과 impactbar 님께서 알려주신 방법으로 해봐도 안됩니다...
이를 어쩌나.... ㅜ.ㅜ
*^^*
1. 제가 리눅스로 확인한 거는 아니고 POSIX 맨페이지에 따르면 no
1. 제가 리눅스로 확인한 거는 아니고 POSIX 맨페이지에 따르면 nohup 은 반드시 nohup.out 화일을 현재 디렉토리밑에 이게안되면 HOME 환경변수 디렉토리 밑에 만들게 되어 있군요. 이 두 군데중 아무데도 nohup.out 화일을 못 만들면 해당 프로그램을 아예 실행시키지 말아야 된다고도 써 있구요. 사용하시는 nohup 이 이규칙을 따르고 있다는 가정하에서 $HOME 디렉토리 밑에 화일이 생겼나를 확인해 보시죠. 아마 생겼더라도 말씀하시는 증상으로 보면 내용은 비어 있겠지만요.
2. 소스에서 stdout (fd==1) 을 닫고나서 이를 다시 /dev/tty 같은데로 옮기지는 않았는지 확인 해 보시죠. 그게 가능성이 좀 있을 것 같은 데요. 아니면 메인에서 첫번째 printf 까지만이라도 소스를 좀 올려놔 보세요.
즐거운 하루되시기를
댓글 달기