请教signal函数的用法!

baggio24 2004-09-09 05:19:02
在好几本书上看signal函数,都没弄明白!
到底是什么样的格式调用呢?返回值呢?

if( signal(SIGKILL,&terminatehandler)==SIG_ERR)

对吗??


...全文
425 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
baggio24 2004-09-11
  • 打赏
  • 举报
回复
好像是SIGKILL不能被捕获

那要是改成别能被捕获的信号好像也没调用killhandler!!
linhai423526 2004-09-10
  • 打赏
  • 举报
回复
把if(signal(SIGKILL,&killhandler)==SIG_ERR)
{
printf("couldn't register signal handler!\n");
}
这段话放在kill()和raise()前面
老虎泰格 2004-09-10
  • 打赏
  • 举报
回复
void *(signal(int signum,void (*handler)(int)))(int);即捕获到signum信号的时候去执行函数HANDLER.........
lifeixiao 2004-09-10
  • 打赏
  • 举报
回复
man 一下不得了
baggio24 2004-09-09
  • 打赏
  • 举报
回复
#include<sys/types.h>
#include<signal.h>
#include<unistd.h>
#include<sys/time.h>

void killhandler(int signumber);

int main()
{
pid_t pid,ppid;

ppid=getpid();
printf("parent pid:%d\n",ppid);

pid=fork();

if(pid==0)
{
printf("child pid:%d\n",getpid());

while(kill(ppid,SIGKILL)==0)
{
printf("kill parent!\n");
exit(0);
}
}
else
{
printf("kill myself!\n");
raise(SIGKILL);
}

if(signal(SIGKILL,&killhandler)==SIG_ERR)
{
printf("couldn't register signal handler!\n");
}

/* raise(SIGKILL);*/
/* alarm(10);*/

exit(0);

}

void killhandler(int signumber)
{
printf("catch signal SIGKILL!\n");
exit(0);
}

这是我自己试写的.想用kill和raise给父进程发信号,用signal处理.
但运行时,killhandler没调用!!!
是调用signal不对还是别的问题?!

baggio24 2004-09-09
  • 打赏
  • 举报
回复
void *(signal(int signum,void (*handler)(int)))(int);

这好像不对吧
wxywh 2004-09-09
  • 打赏
  • 举报
回复
函数定义:
#include <signal.h>
void *(signal(int signum,void (*handler)(int)))(int);

signum:指定信号编号
handler:指定处理函数

返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1).
blh 2004-09-09
  • 打赏
  • 举报
回复
signal(sig_num, signal_handle);

void signal_handle (int sig)

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧