我正在編寫一個程序,將最終用於有一個子進程通過管道發送隨機生成的字符到另一個子進程轉換爲大寫值和輸出,但在我得到遠,我試圖創建子進程並做出一些預期的輸出。我寫了下面的程序:創建新進程並期待輸出
#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