簡體   English   中英

如何正確向子進程發送 SIGTSTP 信號?

[英]How to correctly send SIGTSTP signal to a child process?

我正在編寫一個自定義 shell 程序,用於執行 fork() 和 exec() 的任務。 我想要做的是處理信號 SIGTSPS 以便它掛起子進程。

我目前正在處理 crtl z

 void SIGTSTP_Handler(){

if (child != 0) {
    kill(child, SIGTSTP);
    }
}

和我的父進程waitpid

if (waitpid(child, &status, WUNTRACED |WCONTINUED ) == -1) {
        err(-1, "Failed to waitpid()");
    }
if(WIFSTOPPED(status))
{

    printf("child stop with code: %d\n", WIFSTOPPED(status));
}

當我按 ctrl Z 時,我的進程停止但它以代碼 1 退出。這意味着錯誤。 如果我向它傳遞一個 CONT 信號,我希望能夠暫停子進程並恢復它。 我如何正確處理 ctrl Z 以便它暫停子進程,如果我輸入 fg 它將使暫停進程重新運行?

sleep 10
PID 71740: I must be the parent!
^Z
71740child stop with code: 1

您的子進程已停止,而不是退出。 如果它已退出,則 WIFSTOPPED(status) 將為 0,WIFEXITED(status) 將為非零。

要繼續該過程,請在執行fg命令時向子進程發送SIGCONT信號:

kill(child, SIGCONT)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM