当前位置: 技术问答>linux和unix
getpidd 发送信号
来源: 互联网 发布时间:2016-12-05
本文导语: /* 子进程发送信号,父进程来处理 */ 函数kill(getppid(),SIGUSR1)调用时,getpidd()是>0的,说明SIGUSR1是向子进程发送的。那么父进程执行到sigsuspend(&omask)时一直是挂起的,因为他没有接到SIGUSR1; 但是实际运行的时...
/*
子进程发送信号,父进程来处理
*/
函数kill(getppid(),SIGUSR1)调用时,getpidd()是>0的,说明SIGUSR1是向子进程发送的。那么父进程执行到sigsuspend(&omask)时一直是挂起的,因为他没有接到SIGUSR1;
但是实际运行的时候,父进程一直输出parent while;
求解????
#include
#include
#include
#include
#include
#include
#include
#include
void my_signhanler(int signum)
{
time_t nowtime=0;
struct tm *tim;
if(signum==SIGUSR1)
{
if(time(&nowtime)==-1)
perror("time");
tim=localtime(&nowtime);//always block here
printf("%d-%d-%d,%d:%d:%dn",tim->tm_mon,
tim->tm_mday,
tim->tm_year+1900,
tim->tm_hour,
tim->tm_min,
tim->tm_sec);
}
else if(signum==SIGUSR2)
{
printf("quitn");
//exit(0);
}
return ;
}
int main()
{
printf("parent id:%dn",getpid());
int pid,k,stat;
struct sigaction user_action;
sigset_t block_mask;
sigset_t mask;
sigset_t omask;
sigset_t pendmask;
//sigset_t testmask;
//sigemptyset(&testmask);
sigemptyset(&mask);
sigaddset(&mask,SIGUSR1);
//sigaddset(&testmask,SIGQUIT);
sigprocmask(SIG_BLOCK,&mask,&omask);
sigfillset(&block_mask);
user_action.sa_handler = my_signhanler;
user_action.sa_mask = block_mask;
user_action.sa_flags=0;
sigaction(SIGUSR1,&user_action,NULL);//设置信号处理函数
sigaction(SIGUSR2,&user_action,NULL);
pid=fork();
int i=0;
if(pid0的,说明SIGUSR1是向子进程发送的”??
getppid 是获取父进程的进程ID,和子进程有什么关系?
子进程发送信号,父进程来处理
*/
函数kill(getppid(),SIGUSR1)调用时,getpidd()是>0的,说明SIGUSR1是向子进程发送的。那么父进程执行到sigsuspend(&omask)时一直是挂起的,因为他没有接到SIGUSR1;
但是实际运行的时候,父进程一直输出parent while;
求解????
#include
#include
#include
#include
#include
#include
#include
#include
void my_signhanler(int signum)
{
time_t nowtime=0;
struct tm *tim;
if(signum==SIGUSR1)
{
if(time(&nowtime)==-1)
perror("time");
tim=localtime(&nowtime);//always block here
printf("%d-%d-%d,%d:%d:%dn",tim->tm_mon,
tim->tm_mday,
tim->tm_year+1900,
tim->tm_hour,
tim->tm_min,
tim->tm_sec);
}
else if(signum==SIGUSR2)
{
printf("quitn");
//exit(0);
}
return ;
}
int main()
{
printf("parent id:%dn",getpid());
int pid,k,stat;
struct sigaction user_action;
sigset_t block_mask;
sigset_t mask;
sigset_t omask;
sigset_t pendmask;
//sigset_t testmask;
//sigemptyset(&testmask);
sigemptyset(&mask);
sigaddset(&mask,SIGUSR1);
//sigaddset(&testmask,SIGQUIT);
sigprocmask(SIG_BLOCK,&mask,&omask);
sigfillset(&block_mask);
user_action.sa_handler = my_signhanler;
user_action.sa_mask = block_mask;
user_action.sa_flags=0;
sigaction(SIGUSR1,&user_action,NULL);//设置信号处理函数
sigaction(SIGUSR2,&user_action,NULL);
pid=fork();
int i=0;
if(pid0的,说明SIGUSR1是向子进程发送的”??
getppid 是获取父进程的进程ID,和子进程有什么关系?
|
估计getpidd是敲错了吧,没这个函数。、
他这断代码是在还没脱离父子关系的时候就弑父,如果成功那么他自己也会死掉。但是按理来说作为子进程不应该拥有杀死自己父进程的权限的,这里可能是kill()函数返回有问题(个人猜测下班回家研究确认一下)。
他这断代码是在还没脱离父子关系的时候就弑父,如果成功那么他自己也会死掉。但是按理来说作为子进程不应该拥有杀死自己父进程的权限的,这里可能是kill()函数返回有问题(个人猜测下班回家研究确认一下)。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。