fork

    1熱度

    1回答

    我正在實施一個簡單的shell程序,實現&和|按預期工作。 但是,我想處理中斷,以便在收到SIGINT的情況下,父(shell)和後臺進程不應該終止,但任何前臺進程都應該終止。 我已經初始化了一個信號和一個處理程序,但我想獲得有關如何針對每個進程處理它的不同建議。 void intHandler() { flagInt = 0; fprintf(stderr, "interru

    1熱度

    2回答

    我有一個庫,它註冊了atfork處理程序(通過pthread_atfork()),它在調用fork()時不支持多線程。在我的情況下,我不需要使用分叉環境,因爲我只需要在fork()之後立即致電exec()。所以,我想fork(),但沒有任何atfork處理程序。那可能嗎?我錯過任何重要的邊緣情況嗎? 對於背景信息,庫是OpenBlas,問題描述爲here和here。

    0熱度

    1回答

    某些庫可能會使用pthread_atfork()註冊一些處理程序。我不需要它們,因爲我只使用fork()和exec()。而且,在某些情況下它們可能會造成麻煩。那麼,有沒有辦法重置註冊的處理程序列表? 相關:calling fork() without the atfork handlers,fork() async signal safety。

    1熱度

    1回答

    我正在寫一個簡單的管道程序會要求兩個命令,然後運行程序,就好像他們進入bash作爲cmd1 | cmd2。然後它應該循環並再次詢問,直到其中一個命令是quit。 我已經寫了這麼多: #include<iostream> #include<string> #include<sys/types.h> #include<sys/wait.h> #include<string.h> #inclu

    1熱度

    1回答

    如果我們使用ForkJoinPool框架的RecursiveAction,我們是否需要調用join()? 例如爲: left.fork() right.fork() 或 left.fork() right.fork() left.join() right.join() 如果左右兩個更新一個共同的數據結構,有沒有理由罵加入了左右兩部分? 由於提前, Burcak

    1熱度

    1回答

    我有一個任務,我需要創建一個父進程和2個子進程具有相同的父親,第一個子進程需要讀取一個字符串並打印它控制檯,第二個子進程需要讀取另一個字符串並將其打印在控制檯中,並且父親需要連接這兩個字符串並將其打印在控制檯中。這看起來很簡單,但即將面臨等待和信號部分的艱難時刻,我無法讓父親先等待孩子進程,以便他可以採取行動。 #include <stdlib.h> #include <fcntl.h> #i

    0熱度

    1回答

    看着this post我不明白Kaylum的答案。我有兩個問題。 1)他/她希望使用變量「count」來計算產生的進程總數(即子孫孫等的總數+原始進程)。我看到,他/她通過在父進程中將count設置爲1開始,這有意義(對父進行計數),但是然後S/he在子進程中再次將計數設置爲1。爲什麼這有意義?計數已經設置爲1,並且這隻能再次設置計數等於1。 count += WEXITSTATUS(status

    1熱度

    1回答

    首先,對不起,如果使用不好的英語。 在我的筆記中,我寫過這個子進程通常是製作者,但我不明白爲什麼。 在fork()調用之後,消費者和生產者是誰? 問題是:如果子進程是生產者,他會在父進程完成之前完成,這意味着子進程成爲殭屍進程。 關於這個問題,我試圖瞭解小素描:

    1熱度

    1回答

    我有簡單的生產者消費者程序在C嘗試用fork解決它 生產者試圖在管道上寫入時我得到錯誤: 我已經寫了另一個程序具有相同的邏輯,但這一個不知道爲什麼? 生產者未能寫管道項目:爲什麼我得到這個錯誤,錯誤的文件描述符 任何人有想法? 由於 #define READ 0 #define WRITE 1 int mutex = 1, full = 0, empty = BUFFER_SIZE, x =

    0熱度

    1回答

    我正在嘗試創建一個簡單的GTK應用程序。只要某些文件是由不同的進程創建的,我就想在GUI上寫東西。我想我不能在父進程中執行while(true),因爲這會凍結GUI。相反,我想叉,檢查文件是否存在,並控制GUI,但它似乎沒有工作,我笨拙的代碼如下: int check_for_files(){ FILE *fp; int files_set; char ch; files_set = 0