PID = fork();
如果(pid==0)
{
子過程處理....
}
else if(PID & gt;0)
{
父流程處理....
}
其他
分叉錯誤處理
將您的程序更改為上述形式後,
Kill完成,檢查kill的返回值,沒有錯誤。我換了壹個信號,SIGUSR1,給它註冊了壹個簡單的信號處理函數,問題就解決了。
SIGCONT默認的信號處理函數不知道是什麽,但是發送SIGCONT不能讓子進程返回,除非手動註冊壹個信號處理函數。
妳試試。。我只是修改了程序,好像exec在子流程中沒有響應,但exec是對的:
# include & ltsys/types . h & gt;
# include & ltunistd.h & gt
# include & ltfcntl.h & gt
# include & ltstdio.h & gt
# include & ltsys/wait . h & gt;
# include & ltstdlib.h & gt
# include & ltsignal.h & gt
void tasksighandler(int signal num);
void初始化()
{
信號(SIGUSR1,tasksighandler);
printf("任務準備就緒...\ n ");
printf("任務的pid= %d\n ",getpid());
pause();//子例程掛起
printf("任務重新開始...\ n ");
int a = 0;
for(a = 0;a & lt10;a++)
{
printf("task is diong...\ n ");
睡眠(1);
}
execl("/bin/ls "," ls ",NULL);
perror(" execl ");
}
void tasksighandler(int signal num)
{
printf("OK,捕捉信號\ n ");
}
int main()
{
int I;
PID _ t PID = 0;
PID = fork();
If (pid == 0) /*子進程執行該命令*/
{
信號(SIGUSR1,tasksighandler);
printf("任務準備就緒...\ n ");
//printf("任務的pid= %d\n ",getpid());
pause();//子例程掛起
printf("任務重新開始...\ n ");
int a = 0;
for(a = 0;a & lt5;a++)
{
printf("task is diong...\ n ");
睡眠(1);
}
}
else if(PID & gt;0)
{
printf("pid為%d\n ",PID);
睡眠(5);
int retCode=kill(pid,SIG usr 1);//父進程向子進程發送信號,要求子進程繼續運行。
if(retCode & lt;0)
{
perror(“發送信號錯誤”);
}
睡眠(8);
返回0;
}
其他
{
perror("分叉錯誤\ n ");
退出(-1);
}
}
下面是壹些關於SIGCONT的說明,好像妳在這裏用的情況不太合適:
在POSIX兼容的平臺上,SIGCONT是從較早的停止SIGSTOP信號發送的重新啟動計算機程序的信號。在定義的頭文件signal.h符號信號名稱中,符號常量是SIGCONT,因為信號編號可能會跨平臺並改變用法。
使用
當SIGSTOP被發送到當前狀態的進程時,通常的行為是停留在該進程中。如果妳給它發送壹個SIGCONT信號,這個過程只會繼續。SIGSTOP和SIGCONT用於UNIX shell程序中的作業控制,用於其他目的。