我正在编写一个 Linux 应用程序。如果我打电话会发生什么fork()
然后运行一个接受控制台输入的应用程序?考虑下面的代码:
int process_id = fork();
if (process_id != 0) {
/* this is the parent process */
error = execv("../my_other_app", "parameter1", NULL);
if (error < 0) {
printf("error!");
}
} else {
/* this is the child process. Wait for my_other_app to set up */
sleep(3);
/* now continue */
}
printf("########## press ENTER to stop ##########\n");
getchar();
exit(0);
事情是,my_other_app
还有一个按 ENTER 停止信息。所以当我做的时候getchar()
调用,哪个应用程序正在读取它?主要应用程序或my_other_app
我推出的execv
?
EDIT:通过测试可知my_other_app
优先于控制台。每次都会出现这种情况吗?有没有办法确保控制台由主进程拥有?
两个进程都有其stdin
连接到终端(或任何原始进程的stdin
已连接到)。当你打电话时这不会改变execv
。如果两个进程都尝试读取stdin
同时,无法预测哪一个将获得输入。
如果你想断开子进程与终端的连接,你应该调用setsid()
打电话之前execv
将其放入自己的会话中并删除其控制终端。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)