當前位置:編程學習大全網 - 編程語言 - Linux編程過程編程

Linux編程過程編程

妳分叉後,最好用這種方式區分兩個流程,否則特別容易出問題。

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程序中的作業控制,用於其他目的。

  • 上一篇:求sql數據庫工程師個人簡歷壹份
  • 下一篇:springmvc和其他mvc框架有什麽區別?
  • copyright 2024編程學習大全網