SIGCONT和SIGHUP的顺序发送到孤立的Linux进程组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SIGCONT和SIGHUP的顺序发送到孤立的Linux进程组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1981字,纯文字阅读大概需要3分钟。
内容图文
![SIGCONT和SIGHUP的顺序发送到孤立的Linux进程组](/upload/InfoBanner/zyjiaocheng/950/ec60269ea7e14c07b38be1a55a8435a8.jpg)
APUE说
Since the process group is orphaned when the parentterminates, POSIX.1 requires that every process in
the newly orphaned process group that is stopped (as our child is) be sent the hang-up signal (SIGHUP)
followed by the continue signal (SIGCONT)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#define errexit(msg) do{ perror(msg); exit(EXIT_FAILURE); } while(0)
static void sig_hup(int signo)
{
printf("SIGHUP received, pid = %d\n", getpid());
}
static void sig_cont(int signo)
{
printf("SIGCONT received, pid = %d\n", getpid());
}
static void sig_ttin(int signo)
{
printf("SIGTTIN received, pid = %d\n", getpid());
}
static void pr_ids(char *name)
{
printf("%s: pid = %d, ppid = %d, pgrp = %d, tpgrp = %d\n",
name, getpid(), getppid(), getpgrp(), tcgetpgrp(STDIN_FILENO));
}
int main(int argc, char *argv[])
{
char c;
pid_t pid;
setbuf(stdout, NULL);
pr_ids("parent");
if ((pid = fork()) < 0) {
errexit("fork error");
} else if (pid > 0) { /* parent */
sleep(5);
printf("parent exit\n");
exit(0);
} else { /* child */
pr_ids("child...1");
signal(SIGCONT, sig_cont);
signal(SIGHUP, sig_hup);
signal(SIGTTIN, sig_ttin);
kill(getpid(), SIGTSTP);
//sleep(10);
pr_ids("child...2");
if (read(STDIN_FILENO, &c, 1) != 1) {
printf("read error from controlling TTY, errno = %d\n",
errno);
}
printf("child exit\n");
}
exit(0);
}
程序输出:
parent: pid = 2036, ppid = 1959, pgrp = 2036, tpgrp = 2036
child…1: pid = 2037, ppid = 2036, pgrp = 2036, tpgrp = 2036
parent exit
xiejingfeng@xiejingfeng-desktop:/codes/apue$SIGCONT received, pid = 2037
SIGHUP received, pid = 2037
child…2: pid = 2037, ppid = 1, pgrp = 2036, tpgrp = 1959
read error from controlling TTY, errno = 5
child exit
不会像书中所说的那样输出输出,因为该程序首先接收SIGCONT,然后接收SIGHUP,这对我来说非常令人困惑,你们可以帮我吗?
提前致谢.
解决方法:
在继续执行子级之前,无法传递SIGHUP.当进程停止时,除SIGCONT和SIGKILL之外的所有信号传递都将暂停.
因此,SIGHUP确实会首先到达,但是直到SIGCONT唤醒进程执行后才能进行处理.
内容总结
以上是互联网集市为您收集整理的SIGCONT和SIGHUP的顺序发送到孤立的Linux进程组全部内容,希望文章能够帮你解决SIGCONT和SIGHUP的顺序发送到孤立的Linux进程组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。