2017-02-08 90 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

相關問題