我有一个分叉两个孩子的父进程。我需要强制这些子进程运行时的特定顺序。
例如,父进程从文件中获取“命令”,并且根据该命令,父进程将使用未命名管道将该命令传递给子进程 a 或子进程 b。我需要按照父级从文件接收命令的顺序在子级中发生一些事情。
我使用信号量的方式在进程之间不起作用。有任何想法吗?
信号量在进程之间工作得很好。例如:
#include <stdio.h>
#include <semaphore.h>
#include <unistd.h>
int main(void)
{
// Error checking omitted for expository purposes
sem_t *sem = sem_open("test_semaphore", O_CREAT|O_EXCL, 0, 1);
sem_unlink("test_semaphore");
int child = fork();
printf("pid %d about to wait\n", getpid());
sem_wait(sem);
printf("pid %d done waiting\n", getpid());
sleep(1);
printf("pid %d done sleeping\n", getpid());
sem_post(sem);
if(child > 0)
{
int status;
printf("parent done, waiting for child\n");
wait(&status);
}
printf("pid %d exiting\n", getpid());
return 0;
}
Output:
$ time ./a.out
pid 61414 about to wait
pid 61414 done waiting
pid 61415 about to wait
pid 61414 done sleeping
parent done, waiting for child
pid 61415 done waiting
pid 61415 done sleeping
pid 61415 exiting
pid 61414 exiting
real 0m2.005s
user 0m0.001s
sys 0m0.003s
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)