当前位置: 首页 > news >正文

长春网站优化实战盐城网站优化公司

长春网站优化实战,盐城网站优化公司,深圳论坛,中天建设有限公司官方网站收发信号思想是 Linux 程序设计特性之一#xff0c;一个信号可以认为是一种软中断#xff0c;通过用来向进程通知异步事件。 本文讲述的 信号处理内容源自 Linux man。本文主要对各 API 进行详细介绍#xff0c;从而更好的理解信号编程。 exit(5) 遵循 C11#xff0c; POSI…         收发信号思想是 Linux 程序设计特性之一一个信号可以认为是一种软中断通过用来向进程通知异步事件。 本文讲述的 信号处理内容源自 Linux man。本文主要对各 API 进行详细介绍从而更好的理解信号编程。 exit(5) 遵循 C11 POSIX.1 - 2008 1.库 标准 c 库libc, -lc 2.接口定义 #include stdlib.h[[noreturn]] void exit(int status); 3.接口描述 exit() 函数会导致普通程序终止并将 status 的低字节返回给父进程。 通过 atexit(3) 和 on_exit(3) 注册的所有函数都会被调到顺序和注册顺序相反。如果这些函数中有函数没有返回比如调用了 _exit(2) 或者使用信号杀死了自己那么剩下的函数都不会调用剩下的退出过程也会跳过比如刷新 stdio(3) 流等。如果一个函数通过上面方式注册了多次那么每次都会被调用。 所有打开的 stdio(3) 流都会被刷新并关闭。通过 tmpfile(3) 创建的文件会被删除。 C 标准规定了两个常量EXIT_SUCCESS 和 EXIT_FAILURE可以用来传递给 exit() 指示成功还是失败。         4.返回值 exit() 函数不会返回。 5. 属性 接口属性值exit()线程安全MT-Unsafe race:exit exit() 不是线程安全的会引起数据竞争问题关于数据可以参考 attributes(7)在前几篇文章中也有介绍。 6.注意 如果通过 atexit(3) 或者 on_exit(3) 注册的函数调用 exit() 或者 longjmp(3)那么产生的行为是未定义的。值得注意的是调用 execve(2) 会移除通过 atexit(2) 和 on_exit(3) 注册的函数。 使用 EXIT_SUCCESS 和 EXIT_FAILURE 比用 0 或者非零值1 或 -1更具有移植性尤其是 VMS 会使用不一样的使用习惯。 BSD 尝试标准化了退出码GNU C 库已经采用了可以参考 sysexits.h。 exit() 调用后退出状态必须传递给父进程。主要有三种情况 如果父进程设置 SA_NOCLDWAIT 或者设置了 SIGCHLD 的处置函数为 SIG_IGN那么状态会被忽略子进程立即死掉如果父进程正在等待子进程那么父进程会得到这个退出状态子进程立即死掉否则子进程变成僵尸进程子进程的大多数资源被回收了但是系统进程表中的进程槽会保留来存储一小部分进程信息。这样主要是等待后面父进程通过 waitpid(2)或者其他函数来获得子进程的退出信息那时僵尸进程槽会被释放。 如果系统实现支持 SIGCHLD 信号这时会发送这个信号给父进程。如果父进程设置了 SA_NOCLDWAIT那么是否发送 SIGCHLD 并未定义。 发送给其他进程信号 如果退出进程是会话 leader 并且其终端正控制着会话那么每个前台进程组中的进程都会收到 SIGHUP 信号该终端会从会话上拿掉允许其他新的控制进程获取该控制权。 如果退出进程导致一个进程组成为孤儿并且新产生的孤儿进程组每个进程都停止了那么会在 SIGCONT 信号后再跟上一个 SIGHUP 信号给进程组中的每个进程。参考 setpgid(2) 来查看关于孤儿进程组的解释。 除了以上情况如果要发送的信号是发给要终止进程的子进程的那么通常情况下是不会向子进程发送信号的。然而进程却可以使用 prctl(2) PR_SET_PDEATHSIG 操作来安全如何处理父进程终止时受到的信号。 8.代码 下面程序演示了 fork(2) 和 waitpid() 的用法。程序创建了一个子进程如果没有提供命令行参数那么子进程会使用 pause(2) 来停止允许用户向其发送信号。否则如果指定了命令行参数那么子进程立即返回使用命令行提供的整数作为返回状态值。父进程循环执行通过 waitpid() 来监视子进程使用 W*() 宏来分析返回的状态值。 下面 shell 会话演示了程序的使用 $ ./a.out Child PID is 32360[1] 32359$ kill -STOP 32360stopped by signal 19$ kill -CONT 32360continued$ kill -TERM 32360killed by signal 15[1] Done ./a.out$ 下面是程序源码  #include stdint.h#include stdio.h#include stdlib.h#include sys/wait.h#include unistd.hintmain(int argc, char *argv[]){int wstatus;pid_t cpid, w;cpid fork();if (cpid -1) {perror(fork);exit(EXIT_FAILURE);}if (cpid 0) { /* Code executed by child */printf(Child PID is %jd\n, (intmax_t) getpid());if (argc 1)pause(); /* Wait for signals */_exit(atoi(argv[1]));} else { /* Code executed by parent */do {w waitpid(cpid, wstatus, WUNTRACED | WCONTINUED);if (w -1) {perror(waitpid);exit(EXIT_FAILURE);}if (WIFEXITED(wstatus)) {printf(exited, status%d\n, WEXITSTATUS(wstatus));} else if (WIFSIGNALED(wstatus)) {printf(killed by signal %d\n, WTERMSIG(wstatus));} else if (WIFSTOPPED(wstatus)) {printf(stopped by signal %d\n, WSTOPSIG(wstatus));} else if (WIFCONTINUED(wstatus)) {printf(continued\n);}} while (!WIFEXITED(wstatus) !WIFSIGNALED(wstatus));exit(EXIT_SUCCESS);}}
http://wiki.neutronadmin.com/news/3079/

相关文章:

  • 网站建设验收表福田企业网站推广哪里好
  • wordpress 函数 文件网站怎么seo
  • 做小说网站做国外域名还是国内的好处建设网站如
  • 网站开发 网页设计百度关键词排名
  • 营销型网站建设方案佛山网站优化美姿姿seo
  • 渭南做网站的公司电话合肥app建设公司
  • 辽宁省建设银行e护航网站北京手机网站建设公司
  • 做网站界面用的软件简单html网页设计代码范文
  • 河北省正定县城乡建设网站千年之恋网页设计作业
  • 母婴用品网站建设wordpress开启侧边栏
  • 长沙建站
  • angularjs做的网站有哪些信誉好的菏泽网站建设
  • 网站建设与架构男友实验电商网站计划
  • 北京网站制作公司兴田德润实惠网络规划与设计毕业设计
  • 怎么给领导做网站分析网站建设从零开始视频教程
  • 网站做多久华为网站的建设建议
  • python做网站的书网站建设公司公司好
  • 网站设计_网站建设_手机网站建设什么是网站维护费
  • 展示型网站方案手机端网页制作
  • 北京网站设计公司wx成都柚米科技15Wordpress如何设置运费
  • 宏大建设集团有限公司网站今天河北沧州确诊名单
  • 搜索引擎如何找到网站网站开发开发的前景
  • 上海公司建设网站单位网站建设要记入无形资产吗
  • 做房产网站赚钱吗济南智能网站建设费用
  • 网站建设 市场规模大型国有企业网站建设
  • 外贸公司有必要建设网站吗免费网站建设策划
  • 网站是否需要备案电商运营网站 建设
  • 外贸那些网站好用国外企业合作的网站
  • 黔南州建设局网站做微信首图的网站
  • 做全国社保代理的网站公司网站注册要多少钱