sigprocmask

    0熱度

    1回答

    這部分代碼使用時收到一個SIGUSR1信號給exec一個新的進程,因爲這個過程有一個孩子過程中,也需要退出,所以使用kill發送SIGUSR1到進程組,避免一個循環,使用一個sigprocmask來阻止SIGUSR1,但它不起作用,它有一個無限循環,我找不到錯在哪裏,也許我不是很瞭解BLOCK的含義,但使用信號(SIGUSR1,SIG_IGN)可以避免循環。

    5熱度

    2回答

    我寫了一小段代碼。此代碼首先阻止{SIGSEGV},然後將SIGRTMIN添加到同一組。所以,我最後的信號集是{SIGSEGV,SIGRTMIN}。因此,如果我使用SIG_UNBLOCK,按照我的理解,首先SIGRTMIN應該被解除阻塞,然後再次如果我調用SIG_UNBLOCK,SIGSEGV應該被解除阻塞。即,1){SIGSEGV,SIGRTMIN} 2)SIG_UNBLOCK =解鎖SIGRT

    2熱度

    2回答

    我正在研究使用sigprocmask來阻止特定信號(在這種情況下,SIGALRM和SIGCHLD),當執行一段關鍵的代碼段時。與這些信號相關聯的兩個信號處理程序都將訪問和修改中央數據結構,所以當主進程正在處理它時,阻止它們訪問它是至關重要的。 目前,我的計劃是在代碼的關鍵部分開始時簡單地禁用這些信號,然後在最後重新啓用它們。 void criticalFunction(void) { /

    0熱度

    1回答

    我使用sigprocmask如下: void mask(){ sigset_t new_set,old_set; sigemptyset(&new_set); sigaddset(&new_set,SIGALRM); sigprocmask(SIG_BLOCK, &new_set, &old_set); } 讓我吃驚它打印的大名單莫名其妙地得到由信號中

    0熱度

    1回答

    我想用printf打印sigset。在這個程序中,我用sigprocmask來阻止SIGHUP和SIGTERM。在將set和oset初始化爲空集之後,它們會給出一些隨機的十六進制字符串作爲輸出。我應該如何解決這個問題? 另外,如果我在執行後按Ctrl-C,我對此程序的預期輸出有疑問。捕手功能是否也會繼承當前的信號設置,並且應該按照設置打印? #include<stdio.h> #include<

    0熱度

    1回答

    我有使用sigprocmask fn的多線程代碼。它已知在多線程程序中未指定使用此調用,我明白,我將刪除此調用。但是,我面臨的問題是,如果調用此函數,我的主線程會卡住。我想明白爲什麼會發生這種情況。如果對這個函數的調用被註釋掉了,那麼主線程執行正常。 在Init中的主程序中,很少創建線程池。之後,我調用InitModule fn所調用的TestFunction函數。在InitModule中,調用s

    0熱度

    1回答

    如果我將一堆SIGIO信號發送到進程,並且該進程阻止SIGIO信號並執行其他操作。當我解鎖信號時,將只有一個SIGIO信號或多個SIGIO信號的順序?

    1熱度

    1回答

    在Unix上,我知道調用fork()之後,我需要重置我的信號掩碼並關閉我不希望孩子擁有的文件描述符調用exec()。 但是,我還需要做什麼? 是否有一個全面的文檔,列出所有的事情,你可能想要清理分叉子進程時,爲了給它一個很好的標準執行環境? 我目前在Linux上,但我想要一個包含其他Unix的詳細信息的文檔,以及可能的方法來爲它們進行autoconf測試。

    0熱度

    1回答

    我的代碼C Unix有問題。我將複製關鍵部分: 因此,在第一個sigprocmask發送SIG_UNBLOCK後,不發送前一個句柄(gestisciSignalDopoReg),而是使用標準句柄管理我的信號,因此它只是終止該過程...什麼是錯誤?謝謝 struct sigaction gestoreSegnale; sigset_t mask; sigemptyset(&mask); sig

    1熱度

    1回答

    我正在嘗試創建一個程序來阻止信號SIGUSR1並解除阻塞信號。 在中間我想看到信號被阻止使用sigpending。但它總是說信號沒有被阻擋,並且當它應該被阻止時我可以使用該信號。 這是我的代碼。 #include <stdlib.h> #include <stdio.h> #include <signal.h> static void signals(int signaln) {