2014-04-24 104 views
0

「命令-s」命令,在CLI使用C.C程序掛起當執行

我需要的第一命令我目前正在寫一個程序,將運行多個命令(在一行中)/環運行是sudo -s。因此,我單獨運行此命令來測試程序是否正在運行,但程序在運行此命令時會掛起。我想知道問題是程序還是命令,所以我運行ls。當我運行ls命令時,該程序完美運行,因此我認爲sudo -s命令有些問題,也許我需要使用該命令執行某些操作,以便它可以在CLI中運行。

下面是接受命令的功能:

int executeCommand(char *command, char *result) 
{ 
    /*This function runs a command./*/ 
    /*The return value is the output of command*/ 

    int nSuccess = -1; 
    FILE * fp = NULL; 
    char buffer[1035]; 

    if (command == NULL) 
     render("Command is null"); 

    if (result == NULL) 
     render("result is null"); 
    if (command!=NULL && result!=NULL) 
    { 
     fp=popen(command,"r"); 
     if(fp!=NULL) 
     { 
      strcpy(result,"\0"); 
      while(fgets(buffer, sizeof(buffer)-1,fp)!=NULL) 
      { 
       strcat(result,buffer); 
      } 
      pclose(fp); 
     } nSuccess=0; 

    } 

    return nSuccess; 
} 

順便說一句,我在做一個web應用程序,用戶會寫他要執行的命令。輸入將通過ajax使用POST請求發送到服務器。服務器運行在Linux上。

+0

並運行帶有選項LS? 'ls -n'? – LearningC

+3

a)這看起來像是一個非常危險的web應用程序來編寫。 b)你的sudo -s可能是掛着的,因爲你正在創建一個新的shell,並且你的程序仍然依賴於舊的。 – merlin2011

+0

你是如何配置sudo的?在默認配置中,它將嘗試從終端設備讀取密碼,而不能通過popen提供。 – Joni

回答

0

sudo -s將提示輸入密碼,不會立即返回結果。

+0

好吧,但是當我嘗試手動運行sudo -s時,它並沒有要求輸入密碼,所以我假設,以編程方式,它也不會要求輸入我的密碼。此外,如果它需要我的密碼,它會提示類似「用戶密碼」msg的權利?但我沒有看到任何東西,它就像程序掛起 –

+0

@srhsnl timeout'd? –

0
sudo -s 

將需要密碼,必須輸入運行此命令可以等待口令的程序

+0

好吧,但是當我嘗試手動運行sudo -s時,它並沒有要求輸入密碼,所以我假設,以編程方式,它也不會要求輸入我的密碼。此外,如果它需要我的密碼,它會提示類似「用戶密碼」msg的權利?但我沒有看到任何東西,就好像程序掛起一樣 –