프로세스끼리 변수공유..?
글쓴이: sadrove / 작성시간: 목, 2003/11/13 - 12:06오전
fork()로 자식프로세스가 생성되는데..
생성되고 소멸되는 프로세스들간에 하나의 변수가 공유가 가능한가요.?
예를 들어 아래와 같이요..
int a = 0; while(조건){ if((pid = fork()) < 0) error_handling("fork() error!"); else if(pid==0){ a += 1; exit(0); } } printf("%d\n", a);
위와같이 부모는 계속 반복해서 자식을 생성하고요...
자식에서 a변수의 값을 1씩 증가하고 싶습니다..
근데 자식 프로세스들이 모두 별도로 생성되니까..
증가가 제대로 안됩니다...
즉, 자식프로세스가 5번 만들어졌다가 소멸됐다면 a 는 5가 되겠죠..
뭔가 좋은 방법이 없을까요..?..^^...
Forums:
fork는 분신술에 가깝습니다. 모든 것이 [b]복사[/b]되지요. :D
fork는 분신술에 가깝습니다. 모든 것이 복사되지요. :D
(pid는 예외로 하고요...)
fork된 뒤부터는 서로 변수가 공유되지 않습니다.
fork 하기 전에 a 변수의 값을 늘려 주시면 되겠네요.
아니면 pipe와 같은 방법을 통해 프로세스간 통신을 해 주셔도 됩니다.
----
It is essential, if man is not to be compelled to have recourse, as a last resort, to rebellion against tyranny and oppression, that human rights should be protected by the rule of law.
[Universal Declaration of Human Rights]
음...
파일을 따로 두어서 그곳에 프로세스 카운트 값을 저장하시면 되지 않을까요?
(파일락을 사용해야 할듯...)
또는 스레드를 사용해도 될 것 같구요. ^^;
프로세스끼리 통신하라고 만든게 IPC 니까 ...그녀석들을 사용하세
프로세스끼리 통신하라고 만든게 IPC 니까 ...
그녀석들을 사용하세요...
IPC에 관한것은 스티븐슨의 책을 참고하시면 되겠내요...
(위의 답변중 파이프도 IPC의 하나이니까 간단히 파이프를 쓰셔도 되고요..
파이프라면 ...
간단히 ..부모프로세스에서 변수만들고 자식들이 생성되면서 카운트를 증가시키라는 액션을 취하면 되겠내요..)
Programmers never die: They just GOSUB without RETURN.
윗분들 말씀대로 IPC나 thread 사용하세요^^
윗분들 말씀대로 IPC나 thread 사용하세요^^
부모와 자식간이라면.. mmap을 사용하셔도 좋을듯 하내요..
부모와 자식간이라면.. mmap을 사용하셔도 좋을듯 하내요..
파이프보다는 shared memory가 좋을것같은데요?더 무식한 방법
파이프보다는 shared memory가 좋을것같은데요?
더 무식한 방법으로는 /tmp에 파일을 하나 만들어두고 쓰는방법이 있습니다. ㅎㅎㅎ
하지말고 사용하지 말라는 방법중에는 vfork가 있습니다.요놈은
하지말고 사용하지 말라는 방법중에는 vfork가 있습니다.
요놈은 vfork 후에 exec 계열 함수를 부르는 용도로 주로 사용되는데, 기본적인 개념은 parent로부터 copy가 일어나지 않고 공유하는 특성이 있기 때문에 가능하기는 합니다.
하지만 동작은 보장되어 있지 않으며, 사용하면 안됩니다.
배우시는 입장에서 쓰는 코드라면, 간단한 테스트정도로 하고 마치시는 것이 좋은 코드고 실전에는 사용하지 마시기 바랍니다.
위 코드를 vfork로 바꿔보세요.
---
http://coolengineer.com
댓글 달기