1
這是this question的一個後續步驟。掛起信號處理程序中的線程執行
假設我使用sigaction
來設置我自己設計的信號處理程序。在這個信號處理程序中,我訪問有關CPU狀態的信息(例如線程的堆棧指針)並將其複製到內存中的預定位置。我現在想從另一個線程檢查這個線程堆棧上的值。
有沒有辦法在同一信號處理程序中暫停信號處理程序中線程的執行,以便我可以安全地從另一個線程檢查此線程的堆棧? (注意:我在此定義「安全」意思是「不必擔心線程完成或從函數返回。)
如果我在信號處理程序之外,可以使用sigsupend
;但是,使用它並不安全信號處理程序根據the GNU documentation之內。我也可以嘗試延長使用this question描述的方法的信號,但我不認爲任何標準的* nix的信號將幫助我在這裏。
我不確定我關注 - 我正在尋找首先暫停線程,而不是喚醒它。你介意請詳細說明一下嗎? – tonysdg
你想要'sigsuspend'的地方,'讀(pipefd,...)'。修改的答案是否更清晰?你可以保持線程暫停,只要你喜歡,並通過寫入管道的另一端來喚醒它。 – pilcrow
更清晰 - 謝謝你! – tonysdg