|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
在fork函數問題中,這句指令怎麼執行???
[code]
#include <sys/types.h>;
#include <stdlib.h>;
#include <stdio.h>;
int glob = 6;
char buf[] = "a write to stdout\n";
int main(void)
{
int var;
pid_t pid;
var = 88;
if(write(1, buf, sizeof(buf)-1)!=sizeof(buf)-1)
{
printf("write error!\n");
exit(1);
}
printf("before fork!\n");
if((pid = fork())<0)
{
printf("fork error!\n");
exit(1);
}
else if(pid==0)
{
glob++;
var++;
}
else
{
sleep(2);
}
printf("pid=%d, glob=%d, var=%d\n",getpid(),glob,var); /*****問題所在*****/
exit(0);
}
[/code]
執行結果為
a write to stdout
before fork!
pid=2402, glob=7, var=89
pid=2401, glob=6, var=88
我想問的是我標記的printf("pid=%d, glob=%d, var=%d\n",getpid(),glob,var);
這句指令為什麼要執行兩次, 它是不是應該是在父進程中的,為什麼會在子進程中執行.
請問為什麼?謝謝
注:該源代碼來自<<UNIX環境高級編程>;>;P143 程序8-1
[b][/b] |
在fork函數問題中,這句指令怎麼執行???
子進程沒有exit,當然會執行下去。 |
在fork函數問題中,這句指令怎麼執行???
那麼子進程沒有exit回接著執行什麼?是後續的程序嗎? |
在fork函數問題中,這句指令怎麼執行???
我也有個問題。如何kill 自己
/* daemon.c */
/* author:netkiller
* title :fork template
* */
#include<unistd.h>;
#include<sys/types.h>;
#include <sys/stat.h>;
#include <stdio.h>;
#include <string.h>;
#define MAXFILE 65535
void log(){
FILE *fp;
time_t t;
if((fp=fopen("fork.log","a")) >;=0){
t=time(0);
fprintf(fp,"I'm here at %s\n",asctime(localtime(&t)) );
fclose(fp);
}
}
void my_daemon(){
pid_t pid;
int i;
pid=fork();
if(pid<0){
printf("error in fork\n");
exit(1);
}else if(pid>;0)
exit(0);
setsid();
chdir("/tmp");
umask(0);
for(i=0;i<MAXFILE;i++)
close(i);
}
void parameter(int argc,char **argv){
char param[255];
switch(argc){
case 1:
sprintf(param,"Usage: %s {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}\n",argv[0]);
break;
case 2:
if(strcmp(argv[1],"start")==0){
my_daemon();
sprintf(param,"Starting\n",argv[0]);
}else if(strcmp(argv[1],"stop")==0){
printf("%d",getpid());
//kill();
}
break;
}
printf(param);
}
main(int argc,char **argv)
{
parameter(argc,argv);
/*
for(;;){
sleep(10);
log();
}
*/
}
當xxx stop 自殺。如何寫。。。 |
在fork函數問題中,這句指令怎麼執行???
man 2 kill
用
例如
kill(getpid(), SIGTERM); |
在fork函數問題中,這句指令怎麼執行???
getpid() 取得是自己的IP。
不是以運行的守護進程的那個ID |
在fork函數問題中,這句指令怎麼執行???
-->
你不是要kill自己嗎?
gadfly版主提供的示例是沒問題的。 |
在fork函數問題中,這句指令怎麼執行???
你看看我寫的fork()模板。
Usage: %s {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}
xxxx start 啟動
啟動後在後台運行。。
ps ax 可以看到。。
xxxx stop 停止
停止是的。ps ax 看到的xxxx start 那個。 |
在fork函數問題中,這句指令怎麼執行???
| 在fork函數問題中,這句指令怎麼執行???
faint。netkiller,老是不寫清楚。
像這種啟停,在unix上有很多的方式。啟停腳本是最常見的。
如果是程序中實現,一般也是保存daemon pid,然後像pid發信號的方式 |
在fork函數問題中,這句指令怎麼執行???
啟動腳本,我會.
我想用程序實現.
我沒裝無比,所以打字,就像發手機段心一樣,煩人.
所以,老是不寫清楚 |
在fork函數問題中,這句指令怎麼執行???
kao,炫耀自己吧?我還不會五筆呢!,只會拼音。
老大,你下面的圖片傳送太慢了。還是換成簽名檔吧。我寫字的時候,屏幕佈局不停的變化,感覺像中了病毒一樣。
進程方式常見的就是通過保存pid的方式。 |
| |