父进程和子进程计时
parent process and child process timing
嗨,我有一个简单的问题,但时间问题困扰着我。假设这就是代码。
#include <stdio.h>
int main() {
int p = fork();
if (p==0) {
printf("okn");
sleep(1);
} else {
printf("hey!");
sleep(1);
}
printf("done!");
return 0;
}
我的问题是,当父母和孩子的睡眠时间都是1秒时,"完成!"总是会执行两次吗。因为我注意到,当我在子进程中将睡眠时间增加到10秒时(p==0的情况),我只看到一次"完成!"。
我认为当您增加睡眠时间时,父进程退出得更快,stdout文件描述符关闭。注意,子进程和父进程共享它们的文件描述符。
如果需要,可以在父进程中使用_exit()
,因此当它退出时,子进程文件描述符将不会关闭。通过这种方式,10秒后,你会在终端中看到"完成!"。要使用此方法,您必须使用printf("done!n")
手动刷新缓冲区,因为_exit()
没有刷新缓冲区。
如果您愿意,您可以在父进程中使用类似wait()
的东西来对子进程发出等待。
相关文章:
- 终止 QProcess 不会终止子进程
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 子进程更新共享 mmap 内存,但父进程没有更改
- 使用 waitpid 时等待子进程终止
- 使用重定向标准处理子进程中的 kbhit
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- kill() 总是返回 0(成功),即使在子进程已经结束之后?
- 父进程和子进程之间的 POSIX 信号量
- 检测到由于操作系统内存不足而导致子进程终止
- 使用system()创建独立的子进程
- 从stdin读取时子进程挂起(fork/dup2竞争条件)
- 在 Bash 脚本中处理来自子进程的信号
- Qt C++ - 如何成功将数据传递给子进程?
- C++ 窗口本地系统模拟在子进程中失败
- 将类型化数组写入子进程 stdin 无法正常工作
- 将 nodejs 脚本作为子进程执行(而不是从其他脚本执行)
- C++ Qt获取子python进程的返回值
- 在父进程内启动子进程进程
- 如何防止子分支进程继承CPU亲和性