A 프로세스에서 B 프로세스를 실행할때
글쓴이: Seven.. / 작성시간: 목, 2004/04/15 - 10:50오후
A라는 프로세스는 B가 필요해서
B가 실행되어 있지 않으면
B를 실행시키도록 돌아가는데요
대략적인 코드는
//실행되어있지 않다면 pid=fork(); if(pid==0)//child { setsid(); signal(SIGINT, SIG_IGN); signal(SIGCHLD, SIG_IGN); system(turnon_arg); exit(0); } //부모가 아닌 프로세스는 A프로세스를 실행
이렇게 구현을 했는데
exit(0) 때문인지 종종 쉘이 뜹니다.
그리고..
ps -A 를 해보면
Quote:
1234 tty A
1235 ? A
1236 ? B
이런식으로 나옵니다.
?의 B를 kill 하면 ?의 A가 죽는데
?에 해당하는 A가 아주 종료된걸로 나오는 법이 있을까요?
이건 그렇다 하고.
쉘이 뜨는건.. 어떻게 해결을 할 수 있을까요?
Forums:
system() 함수는 내부적으로 쉘을 부릅니다. exec류의 함수를 쓰
system() 함수는 내부적으로 쉘을 부릅니다. exec류의 함수를 쓰세요.
B가 어떤 프로그램인지 모르겠지만, setsid()도 굳이 필요 없고요.
(setsid()는 대몬 만들때 쓰는걸로 압니다)
자식프로세스임을 확인하기만 하면 바로 exec류를 실행시켜서
해당 프로세스를 지정된 실행파일로 바꿔치기하면 됩니다.
물론 A가 끝난 이후에도 B가 실행되어야 한다면 setsid를 실행시키는
것이 필요하긴 하지만요.
exec류에는 execl(), execv() 등등이 있죠. man execl 해보면 다 나옵니다.
Written By the Black Knight of Destruction
댓글 달기