所以我尝试使用 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/