我有一系列我想运行的程序,它们都在运行时更改一个文件,我们称之为 example.txt。
我正在尝试编写一个可以运行一系列程序的程序,节省每个程序所花费的时间,并在其执行期间获得 example.txt 文件的快照。我只对 example.txt 中的一行感兴趣,并且已经有了提取它的代码,这只是调用一个函数的问题。
在 Windows 中,我会使用 spawn()
系列函数,但这在 Linux 中似乎不是一个选项。我也知道如何为节目计时(开始时间 - 结束时间)。
我需要一个函数,它可以与父级同时生成子级,然后在子级完成时提供一条消息,以便父级可以获取系统时间。
最佳答案
将问题分解后,事情变得容易多了。
问题一:如何产卵?
问题 2:如何在收到子结束的“通知”后让父结束。
要解决问题 1,只需阅读 fork()
的文档即可
switch ((pid = fork())) {
case -1:
/* fork() has failed */
perror("fork");
break;
case 0:
/* Processed by the child */
execv("child", my_args);
puts("execv() has failed");
exit(EXIT_FAILURE);
break;
default:
/* processed by the parent */
puts("Message from the parent");
break;
}
问题 2 通过调用 wait()
解决,准确地说是 waitpid()
。以下代码只是添加到上面代码的底部。
int status;
while(!waitpid(pid, &status, WNOHANG)) {
/* Parent does stuff while waiting for child */
}
/* Parent gets here once child has ended */
有了上面的注释,就很清楚应该把它添加到我的代码中了。我添加了评论以使其更像是一个通用的解决方案。
在 while 循环中,我从文件中读取数据,在从 while 循环中断后,我将获取结束系统时间。
关于c - 运行子程序,同时定期读取文件,并知道子程序何时结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294793/