2017-02-08 62 views
1

我是Linux编程的新手,我想了解一些关于使用execvp()开始的进程的建议。以下是启动"TestApplication"作为子进程的代码。当用户中断(ctrl + C)时,我想杀掉"TestApplication"以及父进程。如何获取通过execvp启动的进程的进程ID()

有关如何实现此目的的任何建议。 PLS。帮帮我。谢谢。

int main(int argc, char* argv[]) 
{ 
    signal(SIGINT, KillProcess); 

    pid_t pid; 
    pid = fork(); 
    if(pid == -1) 
    { 
     printf("Error: Fork process failed"); 
     exit(-1); 
    } 
    else if (pid == 0) 
    { 
     char *const paramList[] = {"5"," 1", NULL}; 
     execvp("TestApplication", paramList); 
    } 
    else 
    { 
     // Wait for signal from the TestApplication process when successfully executed 
    } 
    return 0; 
} 

void KillProcess(int sig) 
{ 
    // Want to get the process ID of "TestApplication" 
    // Then force Kill it 
} 

回答

7

如何获得进程的进程ID通过execvp()启动?

fork()返回父项的值是开始子进程PID

如果fork() sys_call没有失败,那么子进程中的变量pid为0,父进程中的变量为生成的子进程的pid。所以,如果你想知道子进程pid,你可以在父进程中检查返回值fork(),它存储在pid中。为了获得父母程序pid,您可以拨打getpid()

+0

'getpid()'返回父进程的pid。我想获得我刚刚开始的流程的pid。我刚刚启动了我的程序并检查了任务管理器以查看进程ID。我总是只获得父进程的ID。 – killer

+2

@killer 如果您在父进程中检查'pid'变量。即在其他语句中,它是儿童过程的真实pid。 –

+1

感谢@Tony Tannous指出了这一点。我现在得到正确的pid。干杯。 – killer