2010-10-02 144 views
0
#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 

int main (int argc, const char * argv[]) 
{ 
    printf("start\n"); 
    char *const parmList[] = {"/bin/ls", "-l", NULL}; 
    execv("/bin/ls", parmList); 
    return 0; 
} 

我用GCC4.2編譯任何想法爲什麼這可能會崩潰?我在xcode中沒有收到任何錯誤消息。execv爲什麼會崩潰?

編輯:用戶錯誤。 「崩潰」意味着xcode在運行程序時會凍結。按下繼續工作正常。

+0

該程序看起來很好 - 你檢查'execv'的返回狀態嗎? – 2010-10-02 00:18:27

+0

定義「崩潰」。 – 2010-10-02 01:47:36

回答

2

運行代碼和編譯在我的環境很好,Ubuntu的10下GCC 4.4.3這使我相信,你必須從你認爲你有:-)


[email protected]:~$ ./testprog 
start 
total 2152 
drwxr-xr-x 11 pax pax 4096 2010-10-02 08:23 Pax 
: : 
----r-S--- 1 pax pax  0 2010-08-23 18:58 xyz 

[email protected]:~$ gcc --version 
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 
Copyright (C) 2009 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
的一個不同的問題

請嘗試以下代碼以查看實際的exec是否失敗。如果是,它應該告訴你爲什麼。如果不是,則根本看不到rc輸出。

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <errno.h> 

int main (int argc, const char * argv[]) 
{ 
    int rc; 
    printf("start\n"); 
    char *const parmList[] = {"/bin/ls", "-l", NULL}; 
    rc = execv("/bin/ls", parmList); 
    printf ("rc = %d, errno = %d\n", rc, errno); 
    return 0; 
} 

還檢查以確保/bin/ls是你希望它是(可執行文件,而不是一個腳本,例如)的東西。

它是值得澄清你的意思是「崩潰」。它只是沒有產生任何輸出?它傾銷核心文件?它是否會讓您的整個操作系統癱瘓,導致重新啓動?

+0

+1,我試着在我的Mac上,它工作正常。 – 2010-10-02 00:28:17

+0

好笑。在xcode中,它凍結,就像我有一個錯誤。如果我按繼續,它應該像它應該。 – joels 2010-10-02 02:28:37

+1

有趣。如果「繼續」是一個按鈕,則可能有一個斷點設置爲停止。這是一種可能性。另一個原因是xcode IDE可能不適用於讓整個進程在其下面交換出來(這是'exec')。這兩種都是假設,但可能。 – paxdiablo 2010-10-02 04:47:04