之後執行程序,我在主函數fork中使用來創建2個進程。子進程做一些事情,父進程再次分叉,他的孩子調用另一個函數。兩個函數都寫入1個文件,並且所有工作都正常。 我需要的是在函數和所有進程(兩個函數都創建進程)完成之後,將一些東西寫到文件末尾。 我試圖在主要位置編寫fprintf命令,它總是在文件中間的某處寫入,所以我認爲主要和2個函數並行運行。 我試圖用信號量 s = sem_open(s1, o_CREATE, 0666, 0);
這樣:在每個函數的結尾,我寫了sem_post(s)
和主要我把sem_wait(s); sem_wait(s);
和此後我寫了fprintf命令,但它也沒有工作。 有沒有辦法解決這個問題? 謝謝在我的程序中的「fork part」
0
A
回答
1
我認爲你正在尋找wait
函數。見this stack overflow question:wait(NULL)
將等待所有的孩子完成等待孩子過程完成(感謝Jonathan Leffler)。在循環中調用wait
以等待所有子進程完成。在寫入父進程中的文件之前,請立即使用該函數。
如果您想等待特定進程而不是所有進程,還可以閱讀waitpid
函數。
編輯: 或者,您實際上可以跨進程使用信號量,但需要多一點工作。見this stack overflow answer。基本思想是使用sem_open
和O_CREAT
常數的函數。 sem_open
有2個函數簽名:
sem_t *sem_open(const char *name, int oflag);
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
If O_CREAT is specified in oflag, then two additional arguments must be supplied. The mode argument specifies the permissions to be placed on the new semaphore, as for open(2). (Symbolic definitions for the permissions bits can be obtained by including <sys/stat.h>.) The permissions settings are masked against the process umask. Both read and write permission should be granted to each class of user that will access the semaphore. The value argument specifies the initial value for the new semaphore. If O_CREAT is specified, and a semaphore with the given name already exists, then mode and value are ignored.
在你的父進程,調用sem_open
與模式和值參數,使它需要你的權限。在子進程中,請致電sem_open("YOUR_SEMAPHORE_NAME", 0)
以打開該信號燈以供使用。
相關問題
- 1. Part-Rails-API/part-Rails應用程序
- 2. C程序中的fork()
- 3. Haskell中的fork和協程程序
- 4. c程序中的多個fork()
- 5. Shell程序中的fork()和wait()
- 6. XWindow應用程序中的fork()/ exec()
- 7. 在fork/execs程序中使用Devel :: NYTProf
- 8. date = date + part vs. date.concat(part)
- 9. 不存在的進程,fork()
- 10. fork系統調用的應用程序
- 11. fork()的C編程
- 12. 問題用fork()在GTK +程序
- 13. 爲什麼我的Perl程序在fork之後不會收穫子進程?
- 14. 爲什麼在一個簡單的程序中使用fork?
- 15. 在cygwin中使用fork編譯程序的問題
- 16. 在Qt4應用程序中使用「fork()」的便攜方式?
- 17. Resize Eclipse RCP Part
- 18. 使用fork的C++程序中的非阻塞系統調用
- 19. 爲什麼在應用程序下載文件時名爲.part?
- 20. windows中的fork fork和execvp模擬器
- 21. 在fork之後,我需要在父進程中等待()嗎?
- 22. 購買Java part 2
- 23. GIT從我的FORK中刪除分支
- 24. UNIX進程:fork()和wait()的
- 25. Unix - 使用fork的進程()
- 26. C進程fork()
- 27. python線程/ fork?
- 28. 如何編譯我的part文件夾中的scss文件?
- 29. fork()'ed進程中的IO流
- 30. fork()在進程方面的解釋?
使用'fork'不是*並行處理* - 這是不正確的術語。 – t0mm13b