我正在编写一个程序,将最终用于有一个子进程通过管道发送随机生成的字符到另一个子进程转换为大写值和输出,但在我得到远,我试图创建子进程并做出一些预期的输出。我写了下面的程序:创建新进程并期待输出
#include <stdio.h> /* printf, stderr, fprintf */
#include <sys/types.h> /* pid_t */
#include <unistd.h> /* fork */
#include <stdlib.h> /* _exit */
#include <errno.h> /* errno */
int main()
{
pid_t writer;
pid_t reader;
writer = fork();
if (writer == -1)
{
fprintf(stderr, "can't fork, error %d\n", errno);
exit(1);
}
if (writer == 0)
{
printf("Writer process created.\n");
reader = fork();
if (reader == -1)
{
fprintf(stderr, "can't fork, error %d\n", errno);
exit(1);
}
if (reader == 0)
{
printf("Reader process created.\n");
kill(reader);
printf("Reader was successfully murdered.\n");
}
kill(writer);
}
wait();
printf("Writer killed.\n");
return 0;
}
我会非常喜欢的输出出来,如下:
Writer process created.
Reader process created.
Reader was successfully murdered.
Writer killed.
但由于这一点,它输出:
Writer process created.
Reader process created.
Reader was successfully murdered.
Writer killed.
Writer killed.
Writer killed.
就好像它正在经历父进程的代码的整个迭代,以及从它们被创建的点开始的两个子进程,这也导致我相信它们没有被杀死t我想要他们的适当时间。有人能指出我正确的方向吗?
我喜欢你的字符串。尽管最后一行可能更有创意:'printf(“在苏联俄罗斯,程序终止你。\ n”);返回0;'。 – 2012-03-06 23:03:02
你确定你想要:if(reader == 0){kill(reader); ...}(kill(0);)? – ebutusov 2012-03-06 23:07:42
@muntoo哈哈 - 我喜欢你的建议,我想我会使用xD – RedMageKnight 2012-03-06 23:09:36