免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4141 | 回复: 8
打印 上一主题 下一主题

fork出来的子进程在execl后,怎么返回信号给父进程?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-30 15:22 |只看该作者 |倒序浏览
父进程fork一个子进城后,子进程执行execl的操作,执行完后,子进程自动返回给父进程信号,这个返回是execl系统调用自动的吗?
看下面的程序:
#include        <sys/types.h>;
#include        <sys/wait.h>;
#include        "ourhdr.h"

char    *env_init[] = { "USER=unknown", "ATH=/tmp", NULL };

int
main(void)
{
        pid_t   pid;

        if ( (pid = fork()) < 0)
                err_sys("fork error";
        else if (pid == 0) {    /* specify pathname, specify environment */
                if (execle("/usr/home/mike/study/C/APUE/echoarg",
                                   "echoarg", "myarg1", "MY ARG2", (char *) 0,
                                   env_init) < 0)
                        err_sys("execle error";
                printf("hello child is over\n";        }
        if (waitpid(pid, NULL, 0) < 0)
                err_sys("wait error";

        if ( (pid = fork()) < 0)
                err_sys("fork error";
        else if (pid == 0) {    /* specify filename, inherit environment */
                if (execlp("echoarg",
                                   "echoarg", "only 1 arg", (char *) 0) < 0)
                        err_sys("execlp error";
        }
        exit(0);
}
红色的那句话,会不会执行?子进程是怎么返回的呢?

论坛徽章:
0
2 [报告]
发表于 2004-12-30 15:36 |只看该作者

fork出来的子进程在execl后,怎么返回信号给父进程??

不执行。
系统会自动发信号。

论坛徽章:
0
3 [报告]
发表于 2004-12-30 16:07 |只看该作者

fork出来的子进程在execl后,怎么返回信号给父进程??

你说的是execl执行完了,自动返回的吗?
是谁返回的?如果不是execl调用,是其他的调用,也自动返回吗?

论坛徽章:
0
4 [报告]
发表于 2004-12-30 16:35 |只看该作者

fork出来的子进程在execl后,怎么返回信号给父进程??

子进程怎么返回,由你要exec的程序的exit、return等等来决定。execv系列函数不返回,除非出错了。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-12-30 16:48 |只看该作者

fork出来的子进程在execl后,怎么返回信号给父进程??

exec调用是替换当前进程,调用结束,子进程也就结束了

to albcamus:安顿好了?到北京了?欢迎回来啊!

论坛徽章:
0
6 [报告]
发表于 2004-12-30 17:01 |只看该作者

fork出来的子进程在execl后,怎么返回信号给父进程??

exec后,进程的代码段(包括那条prngf语句)被替换。

论坛徽章:
0
7 [报告]
发表于 2004-12-31 09:18 |只看该作者

fork出来的子进程在execl后,怎么返回信号给父进程??

原帖由 "yuxh" 发表:

to albcamus:安顿好了?到北京了?欢迎回来啊!


都安顿好了,谢谢大哥。回来继续跟大家学习……

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-12-31 12:45 |只看该作者

fork出来的子进程在execl后,怎么返回信号给父进程??

albcamus 这么久没见你灌水,原来转基地了?

论坛徽章:
0
9 [报告]
发表于 2004-12-31 13:33 |只看该作者

fork出来的子进程在execl后,怎么返回信号给父进程??

exec家族在调用时也会出错,所以printf有机会遇到。
比如
int example()
{
    char *argument[4];
    char **environ;
    argument[0]="sh";
    argument[1]="-c";
    argument[2]="/usr/sbin/shellfile";
    argument[3]=NULL;
    execve("/bin/bash", argument, environ);
    printf(".........\n";
    exit(1);
}

int main()
{
    int pid;
    pid = fork();
    if(-1 == pid)
        return -1;
    else if(0 == pid)
        example();
    else
    {
        int status;
        waitpid(pid, &status, 0);
    }
    return 0;
}


这个例子的执行一定出错,printf会打印出来

而将environ声明成extern就没问题

这是调用出错的一个简单例子

我前两天刚犯的,嘿嘿
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP