簡體   English   中英

信號處理程序和waitpid共存

[英]Signal handler and waitpid coexisting

我正在用C編寫一個應支持后台和前台進程的shell。

約束:

  • 終止的后台進程應由信號處理程序捕獲
  • 不能使用全局變量與信號處理程序進行通信
  • 不允許列出進程/ pid

我的解決方案:

  • 等待直到前台進程終止
  • 對於后台進程,請立即返回到提示
  • 處理程序捕獲SIGCHLD,其中使用waitpid清除進程表

問題:

  • 前景進程也會觸發處理程序,導致兩個waitpid之一出錯
  • 無法通過運行前台進程時忽略SIGCHLD來解決,因為后台進程可能會在這段時間內終止
  • 找不到使處理程序忽略特定pid的方法(前台進程已啟動)

謝謝!

問題:

  • 前景進程也會觸發處理程序,導致兩個waitpid之一出錯

這不是問題-只需離開處理程序即可。

void handler(int signum)
{
    pid_t pid;
    while (pid = waitpid(-1, NULL, WNOHANG), pid > 0)
        fprintf(stderr, "%d terminated\n", pid);
}

暫無
暫無

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

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