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

时间:2017-02-08 07:25:35

标签: c linux

我是linux编程的新手,我想获得一些关于杀死使用execvp()开始的进程的建议。以下是将"TestApplication"作为子进程启动的代码。当用户中断(ctrl + C)时,我想要删除"TestApplication"以及父进程。

有关如何实现这一目标的任何建议。 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
}

1 个答案:

答案 0 :(得分:7)

  

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

fork()返回父级的值是启动子进程PID

如果fork() sys_call没有失败,则子进程中的pid变量为0,父进程中的pid变量为生成子进程的fork()。因此,如果您想知道子进程pid,您只需检查父进程中pid的返回值,该值存储在pid中。为了获得父流程getpid(),您只需拨打var interfaces = new List<string>(); var mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); var moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { if (!(bool)mo["ipEnabled"]) continue; string desc = (string) (mo["Description"]); interfaces.Add(desc); } return interfaces;