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
的程序(这就是 p
在 execlp
).它会在 /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
的别称。
所以我正在尝试使用 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
的程序(这就是 p
在 execlp
).它会在 /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
的别称。