我在这里尝试进行小型单元测试。但是程序并没有像我预期的那样工作。
char *args[2];
args[0] = (char*)"/usr/bin/firefox";
args[1] = NULL;
pid = fork();
printf("forked and my pid is %d\n",pid);
//check for errors
if (pid<0){
printf("Error: invoking fork to start ss has failed, Exiting\n ");
exit(1);
}
//the child process runs firefox
if (pid==0){
if (execv(args[0],args)<0){
perror("Error: running s with execvp has failed, Exiting\n");
}
printf("IVE BEEN KILLED\n");
}
//dad is here
printf("DAD IS GOING TO KILL U\n");
if (pid>0){
sleep(3);
kill(get_pidof(string("firefox")),SIGUSR1);
}
现在,我希望程序运行如下: 1.孩子运行 firefox(它确实如此) 2.爸爸打印 DAD IS GOING TO KILL U(到目前为止一切顺利) 3.firefox 将打开 3 秒,然后然后关闭(也这样做) 4.子进程将完成运行 execv 并打印“IVE BEEN KILLED”。这不会发生。
我的目标是知道 execv 运行的程序在 execv 继续运行(我被杀死 printf 所在的位置)之后立即通过提高几个标志来完成。我有几千行的代码,除非必要,否则不想使用其他方法。
谢谢