我寫我自己的unix shell作爲我的任務的一部分,我無法處理創建後臺進程。我寫了一個信號處理功能,並實施了必要的(從我的觀點,但顯然還不夠好點)部件,以我的代碼如下:在我自己的shell中創建後臺進程
void handler(int sig)
{
int pid;
int status;
pid = wait(NULL);
printf("[%d]retval: %d \n", pid, WEXITSTATUS(status));
fflush(stdout);
}
int main() {
.....
....
struct sigaction sigchild;
memset (&sigchild, 0, sizeof(sigchild));
sigchild.sa_handler = handler;
sigchild.sa_flags = SA_SIGINFO | SA_NOCLDWAIT;
...
...
if(isBackground) //background process
{
sigaction(SIGCHLD, &sigchild, 0);
}
當我進入「休眠5 &」例如,然後輸入「ps」查看沒有睡眠的過程。可能是什麼問題?提前致謝。
與您的問題沒有關係,但絕對不能在信號處理程序中使用'printf()'。你可能會發現信號處理程序中的wait()也是一個災難。 – JeremyP 2012-03-14 17:52:26
也許「man 3守護進程」可以提供幫助? Afaik是最簡單的任何事情守護進程的最簡單的方法。 – AoeAoe 2012-03-14 19:12:23