注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
防病毒必务宝典—计算机病毒专杀
高手支招 巧妙利用系统进程手工杀
清除不明进程msser 珊瑚QQ病毒防
巧妙利用系统进程拒绝病毒侵袭
杀毒全接触:关于mcafee的进程了
ORACLE实例的进程结构和内存结构
存储过程编写经验和优化措施
Windows 2000 常用系统进程列表
Windows 2000进程细述
详细分析进程 手工搞定可疑病毒
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> C >> 文章正文
多进程编程
作者:佚名  来源:不详  点击:  更新:2006-12-19
简介:
bsp;        int sig;
        说明:这些系统调用提供了应用程序对指定信号的简单的信号处理.
             signal()和sigset()用于修改信号定位.参数sig指定信号(除了
             SIGKILL和SIGSTOP,这两种信号由系统处理,用户程序不能捕捉到).
             disp指定新的信号定位,即新的信号处理函数指针.可以为
             SIG_IGN,SIG_DFL或信号句柄地址.
             若使用signal(),disp是信号句柄地址,sig不能为SIGILL,SIGTRAP
             或SIGPWR,收到该信号时,系统首先将重置sig的信号句柄为SIG_DFL,
             然后执行信号句柄.
             若使用sigset(),disp是信号句柄地址,该信号时,系统首先将该
             信号加入调用进程的信号掩码中,然后执行信号句柄.当信号句柄
             运行结束
             后,系统将恢复调用进程的信号掩码为信号收到前的状态.另外,
             使用sigset()时,disp为SIG_HOLD,则该信号将会加入调用进程的
             信号掩码中而信号的定位不变.
             sighold()将信号加入调用进程的信号掩码中.
             sigrelse()将信号从调用进程的信号掩码中删除.
             sigignore()将信号的定位设置为SIG_IGN.
             sigpause()将信号从调用进程的信号掩码中删除,同时挂起调用
             进程直到收到信号.
             若信号SIGCHLD的信号定位为SIG_IGN,则调用进程的子进程在终
             止时不会变成僵死进程.调用进程也不用等待子进程返回并做相
             应处理.
        返回值:调用成功则signal()返回最近调用signal()设置的disp的值.
             否则返回SIG_ERR.
        例子一:设置用户自己的信号中断处理函数,以SIGINT信号为例:
             int flag=0;
             void myself()
             {
                 flag=1;
                 printf("get signal SIGINT\n");
                 /*若要重新设置SIGINT信号中断处理函数为本函数则执行以
                  *下步骤*/
                 void (*a)();
                 a=myself;
                 signal(SIGINT,a);
                 flag=2;
             }
             main()
             {
                 while (1) {
                     sleep(2000);  /*等待中断信号*/
                     if (flag==1) {
                         printf("skip system call sleep\n");
                         exit(0);
                     }
                     if (flag==2) {
                         printf("skip system call sleep\n");
                         printf("waiting for next signal\n");
                     }
                 }
             }
    11.kill()
        功能:向一个或一组进程发送一个信号.
        语法:#include 
             #include 
             int kill(pid,sig);
             pid_t pid;
             int sig;
        说明:本系统调用向一个或一组进程发送一个信号,该信号由参数sig指
             定,为系统给出的信号表中的一个.若为0(空信号)则检查错误但
             实际上并没有发送信号,用于检查pid的有效性.
             pid指定将要被发送信号的进程或进程组.pid若大于0,则信号将
             被发送到进程号等于pid的进程;若pid等于0则信号将被发送到所
             有的与发送信号进程同在一个进程组的进程(系统的特殊进程除
             外);若pid小于-1,则信号将被发送到所有进程组号与pid绝对值
             相同的进程;若pid等于-1,则信号将被发送到所有的进程(特殊系
             统进程除外).
             信号要发送到指定的进程,首先调用进程必须有对该进程发送信
             号的权限.若调用进程有合适的优先级则具备有权限.若调用进程
             的实际或有效的UID等于接收信号的进程的实际UID或用setuid()
             系统调用设置的UID,或sig等于SIGCONT同时收发双方进程的会话
             号相同,则调用进程也有发送信号的权限.
             若进程有发送信号到pid指定的任何一个进程的权限则调用成功,
             否则调用失败,没有信号发出.
        返回值:调用成功则返回0,否则返回-1.
        例子:假设前一个例子进程号为324,现向它发一个SIGINT信号,让它做
             信号处理:
             kill((pid_t)324,SIGINT);
    12.alarm()
        功能:设置一个进程的超时时钟.
        语法:#include 
             unsigned int alarm(sec)
             unsigned int sec;
        说明:指示调用进程的超时时钟在指定的时间后向调用进程发送一个
             SIGALRM信号.设置超时时钟时时间值不会被放入堆栈中,后一次
             设置会把前一次(还未到超时时间)冲掉.
             若sec为0,则取消任何以前设置的超时时钟.
             fork()会将新进程的超时时钟初始化为0.而当一个进程用exec()
             族系统调用新的执行文件时,调用前设置的超时时钟在调用后仍
             有效.
        返回值:返回上次设置超时时钟后到调用时还剩余的

上一页  [1] [2] [3] [4] [5] [6] 下一页






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务