這裏是我的代碼:爲什麼我的deamon重新啓動後不能打印到控制檯?
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
pid_t pid;
pid = fork();
if (pid != 0)
{
exit(0);
}
setsid();
chdir("/");
while(1){
sleep(4);
printf("%s\n", "Hello world!");
}
return 0;
}
現在好了,我會打開終端,並再次內啓動慶典,輸出將是:
Last login: Tue Jun 2 14:29:49 on ttys000
Korays-MacBook-Pro:~ koraytugay$ bash
bash-3.2$ ./a.out
bash-3.2$ Hello world!
Hello world!
Hello world!
exit
exit
Korays-MacBook-Pro:~ koraytugay$ Hello world!
Hello world!
我想在這裏展示的是,我開始了終端,據我所知開始了bash,在bash中我又開始了一個bash並開始了我的程序。
即使是我離開的bash,該守護程序仍在運行,這正是我所期待的..
但問題是,如果我退出終端應用程序,然後重新啓動它,我不會看到「Hello World」 的了..
我看到的是:
Last login: Tue Jun 2 14:30:46 on ttys000
Korays-MacBook-Pro:~ koraytugay$
是我的守護進程死後我關閉終端?爲什麼在第一種情況下,即使我退出bash,父bash仍顯示Hello Worlds,但是在我重新啓動終端之後仍然顯示?
這就是我所說的終端:http://blog.teamtreehouse.com/introduction-to-the-mac-os-x-command-line
另外我想補充這些信息,
在當我執行
ps -A
我仍然看到新航站樓:
41891 ?? 0:00.01 ./a.out
41902 ?? 0:00.01 ./a.out
但是沒有文字?爲什麼沒有文字發送到標準輸出?據我所知,守護者仍在執行,終端正在向我展示標準,不是嗎?
標準不總是0嗎?你是什麼意思該文件是一個不同的文件? –
使用'lsof'打開您的應用程序的文件描述符。您將看到stdout指向的位置。 –