|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
fork啟動進程後.........!急!可以實現嗎?
fork啟動進程後如何更新其中變量的值?
int main()
{
int i,j,gg=0;
for (j =0 ;j <4;j++)
{
printf("hello\n");
if ((pid = fork())==0)
{
for (i=0; i<10; i++)
{
printf("---gg:%d",gg);
sleep(2);
}
exit(0);
}
}
for (j=0;j<10;j++)
++gg;
}
我在啟動完四個子進程之後,想更新其中的變量的值請問有什麼辦法。
上面程序想更新GG的值但是不行,請問如何處理?
只能用IPC嗎?有沒別的辦法?
我在網上看見很多地方有這麼一文章:
Linux程序設計入門 - fork, pthread, and signals
下面的main是不是不完整啊,要不這個程序有什麼用?
哪位有完整的?我也「希望"守護神"在系統中只有一個」謝謝
範例三: lock.c
許多的時候,我們希望"守護神"在系統中只有一個,這時候會需要用到pid
lock的技巧。如果您注意到/var/run目錄中的內容,您會發現到有許多的*.pid
檔,觀看其內容都是一些數字,這些數字其實就是該行程的pid。
#include <stdio.h>;
#include <stdlib.h>;
#include <unistd.h>;
void main(void)
{
FILE *fp;
pid_t pid;
exit(-1);
}
act.sa_handler = quit;
act.sa_flags = 0;
sigemptyset(&act.sa_mask);
sigaction(SIGTERM,&act,NULL);
sigaction(SIGHUP,&act,NULL);
sigaction(SIGINT,&act,NULL);
sigaction(SIGQUIT,&act,NULL);
sigaction(SIGUSR1,&act,NULL);
sigaction(SIGUSR2,&act,NULL);
for (;;) {
sleep(3);
}
} |
fork啟動進程後.........!急!可以實現嗎?
在啟動完四個子進程之後,想更新其中的變量的值請問有什麼辦法。
上面程序想更新GG的值但是不行,請問如何處理?
可以呀。
你在子進程中EXIT(0)了,如何能執行後面的++GG?
改
printf("---gg:%d",gg);
為:
printf("---gg:%d",gg++);
看一下是怎樣的 |
fork啟動進程後.........!急!可以實現嗎?
你理解錯了,
你在那裡加在父進行中是不能體現出來的,我是要實現你這樣的功能,還要在父進程中體現出來值被修改了 |
fork啟動進程後.........!急!可以實現嗎?
子進程有父進程gg的拷貝,直接對gg操作,應該是子進程的gg操作,對父進程的gg應該是沒有影響的 |
fork啟動進程後.........!急!可以實現嗎?
大概可以把GG放在共享內存區吧;
然後使用共享的互斥鎖;
麻煩了吧 |
fork啟動進程後.........!急!可以實現嗎?
所謂的守護神就是利用*.pid文件鎖 |
fork啟動進程後.........!急!可以實現嗎?
看來要好好看看FORK了 |
fork啟動進程後.........!急!可以實現嗎?
「你理解錯了,
你在那裡加在父進行中是不能體現出來的,我是要實現你這樣的功能,還要在父進程中體現出來值被修改了
」
子PROCESS和父PROCESS的GG是根本無關係的不同的變量,不能相互「體現」出來。 |
fork啟動進程後.........!急!可以實現嗎?
Child process will be located into a new stack and at the init time, system would duplicate all information from father process, such as envs, varbs, Gid, Uid, access rights and so on, however, the gg in child and gg that is in father are totally different, see below for more details:
------------------------ ->; Child 1's Stack
gg = 0;
... ...
i = 5;
pid = 1236;
ppid = 1234;
------------------------
------------------------ ->; Child 2's Stack
gg = 0;
... ...
i = 5;
pid = 1237;
ppid = 1234;
------------------------
------------------------ ->; Child 3's Stack
gg = 0;
... ...
i = 5;
pid = 1238;
ppid = 1234;
------------------------
------------------------ ->; Child 4's Stack
gg = 0;
... ...
i = 5;
pid = 1239;
ppid = 1234;
------------------------
------------------------ ->; Father's Stack
gg = 10;
... ...
i = 0;
j = 10;
pid = 1234;
------------------------ |
fork啟動進程後.........!急!可以實現嗎?
| |
|