2014-04-24 58 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的权利?但我没有看到任何东西,就好像程序挂起一样 –