[英]Fork and execlp not executing my program?
因此,我嘗試使用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;
}
它沒有運行,為什么有任何想法?
我認為您的程序實際上運行良好。 而且,“ test”是命令的糟糕名稱。
當您調用execlp("test",...)
,內核會在PATH
環境變量(即execlp
的p
表示)中查找名為test
的程序。 它將在/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
另一個名稱。
execlp("test", "test", (char*)0);
這是在UNIX還是Linux系統上? 如果指定為第一個參數的程序不包含任何“ /”字符,則execlp()
將在程序的命令路徑(您的PATH環境變量)中搜索。 就是這種情況,因此它將在命令路徑中搜索名為“ test”的程序。
碰巧,unix系統通常在/bin
或/usr/bin
有一個名為“ test”的程序,並且如果您在不帶任何參數的情況下運行該程序,它將不會打印任何內容。 您可能正在執行該程序,而不是要執行的程序。
如果要執行的“測試”程序位於當前目錄中,請嘗試調用execl()
而不是execlp()
。 execl()
不會搜索您的PATH,因此嘗試調用“測試”只會在您的當前目錄中查找該程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.