我是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
}
答案 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;
。