2011-05-24 61 views
1

有關的代碼是非常巨大的,因此我很抱歉,我不能在這裏發佈它。問題是: - 我寫了一個小程序如下:停止自己的過程

#include<stdio.h> 
#include<sys/types.h> 
#include<unistd.h> 
#include<signal.h> 
int main() 
{ 
printf("\n Process id",getpid()); 
fflush(stdout); 
if(kill(getpid(),SIGSTOP)!=0) 
    printf("\nError"); 
} 

運行後我得到以下O/P:

進程ID 2664

[1] +停止./test_SIGSTOP

[目錄路徑] $

這正是預期的。但在我的實際程序中,我說的內容非常龐大...控制權僅僅來自kill函數之上(我知道它是因爲我有打印語句並刷新它們)並掛起而沒有自動停止進程並出現命令提示符。 對於指針來說可能會很不友善。 謝謝

+0

介意至少在函數中調用'kill',只是爲了某些上下文? – ladaghini 2011-05-24 05:17:16

+4

這個較大的程序是否有可能捕獲SIGSTOP的任何類型的信號處理機制? – 2011-05-24 06:14:40

+2

我可以假設你的進程做了fork,並且父進程或者子進程仍在運行。而且,我想指出SIGSTOP不能被捕獲。 – tvn 2011-05-24 07:23:41

回答

1

您可以將調試器附加到正在運行的程序,並找出它掛起的位置/原因。而且,raise()功能使用更方便。但首先,使用ps並檢查進程的標誌以確認其狀態(運行/睡眠/停止)。

+0

謝謝...會回來。 – 2011-05-24 11:46:45