fork和execlp没有执行我的程序?

时间:2015-03-08 18:00:50

标签: c fork parent-child pid child-process

所以我尝试使用fork创建一个孩子并让那个孩子使用execlp运行一个程序,唯一的问题是它没有运行......有点儿。继承我的简单程序

else if (pid == 0)
    {

        fprintf(stderr,"Child process is accessing memory %d.\n", rand_num);
        execlp("helloworld", "helloworld", (char*)0);
        printf("hi\n");
        exit(0);
    }    

我做了一些研究,并且读到如果执行成功,printf("hi\n)不会运行,那就是发生了什么,它不会打印出来,这意味着它正在访问程序吗?但我的程序测试是一个简单的Hello World输出

#include <stdio.h>

int main()
{ 
    printf("Hello World\n");

    return 0;
}

并且它没有运行,任何想法为什么?

2 个答案:

答案 0 :(得分:1)

我认为你的程序实际上工作得很好。而且,&#34;测试&#34;是命令的可怕名称。

当您调用execlp("test",...)时,内核会在您的test环境变量中查找名为PATH的程序(p表示execlp {1}})。它会在/bin中找到一个:

$ ls -l /bin/test
-rwxr-xr-x. 1 root root 37368 Oct 15 04:31 /bin/test

/bin很可能在您当前目录之前的$PATH中。事实上,您当前的目录可能不在您的$PATH中。

/bin/test程序(很好,主要是)用于在shell中实现条件语句。例如,当你说得对:

if [ -f /my/file ]; then ...

[实际上只是/bin/test的另一个名称。

答案 1 :(得分:0)

execlp("test", "test", (char*)0);

这是在unix还是linux系统上?如果指定为第一个参数的程序不包含任何&#34; /&#34; execlp()将搜索程序的命令路径(您的PATH环境变量)。字符。这就是这里的情况,因此它将在命令路径中搜索名为&#34; test&#34;的程序。

unix系统通常有一个程序在/bin/usr/bin名为&#34; test&#34;,如果你运行该程序没有任何参数,它就不会打印任何东西您可能正在执行该程序而不是您要执行的程序。

如果这&#34;测试&#34;要执行的程序位于当前目录中,请尝试调用execl()而不是execlp()execl()没有搜索您的PATH,因此尝试调用&#34; test&#34;只会在当前目录中查找该程序。