簡體   English   中英

Fork和execlp無法執行我的程序?

[英]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環境變量(即execlpp表示)中查找名為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM