2011-05-24 57 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