Fork 和 execlp 不执行我的程序?

Fork and execlp not executing my program?

所以我正在尝试使用 fork 创建一个 child 并让 child 运行 一个使用 execlp 的程序,唯一的问题是它不是 运行ning ... 的种类。这是我的简单程序

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) 不会 运行,这就是发生的事情,它不会打印出 hi,这意味着它正在访问程序对吗?但是我的程序测试是一个简单的Hello World输出

#include <stdio.h>

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

    return 0;
}

它不是 运行ning,知道为什么吗?

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

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

的程序

碰巧 unix 系统通常在 /bin/usr/bin 中有一个名为 "test" 的程序,如果您 运行 该程序没有任何参数,它不会'不要打印任何东西。您可能正在执行该程序而不是您打算执行的程序。

如果您要执行的 "test" 程序在当前目录中,请尝试调用 execl() 而不是 execlp()execl() 不会搜索您的 PATH,因此尝试调用 "test" 只会在您的当前目录中查找该程序。

我认为您的程序实际上运行良好。而且,"test" 是一个糟糕的命令名称。

当您调用 execlp("test",...) 时,内核会在您的 PATH 环境变量中查找名为 test 的程序(这就是 pexeclp).它会在 /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的别称。