c - Fork 和 execlp 不执行我的程序?

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

#include <stdio.h>

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

    return 0;
}

它没有运行,有什么想法吗?

最佳答案

我认为你的程序实际上运行得很好。而且,“test”对于命令来说是一个糟糕的名称。

当您调用 execlp("test",...) 时,内核会沿着您的 PATH 查找名为 test 的程序环境变量(即 execlp 中的 p 含义)。它将在 /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 的另一个名称。

关于c - Fork 和 execlp 不执行我的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28929924/

相关文章:

mercurial - 有没有办法提供像 BitBucket/Kiln 这样的基于 Web 的自托管 Mercurial 存储库 fork ?

PHP:递归获取父级的子级

css - 悬停时隐藏 div 的子元素

c - getnameinfo 原型(prototype)要求 sockaddr 而不是 sockaddr_in?

c - ANSI C/C89 结构体到 int array[]

c - 这里使用信号的方式背后的想法是什么?

C++ 定时进程

c++ - 如何使用 C 或 C++ 获取目录中的文件列表?

c - 用于峰值 EQ 的 IIR 系数,如何将它们传递给 vDSP_deq22?

java - Solr 仅在子查询匹配时返回父文档