![](/img/trans.png)
[英]How to properly wait for foreground/background processes in my own shell in C?
[英]creating background processes in my own shell
我正在編寫自己的unix shell作為作業的一部分,我無法處理創建后台進程的問題。 我編寫了一個信號處理函數,並將必要的(從我的角度來看,但顯然不夠好)部分實現了我的代碼,如下所示:
void handler(int sig)
{
int pid;
int status;
pid = wait(NULL);
printf("[%d]retval: %d \n", pid, WEXITSTATUS(status));
fflush(stdout);
}
int main() {
.....
....
struct sigaction sigchild;
memset (&sigchild, 0, sizeof(sigchild));
sigchild.sa_handler = handler;
sigchild.sa_flags = SA_SIGINFO | SA_NOCLDWAIT;
...
...
if(isBackground) //background process
{
sigaction(SIGCHLD, &sigchild, 0);
}
例如,當我輸入“ sleep 5&”,然后輸入“ ps”以查看進程時,就沒有睡眠。 可能是什么問題? 提前致謝。
子進程是后台進程。 父級是前台進程。 SIGCHLD是當孩子終止時發送給父母的信號。 將if (isbackground
更改為if(!background)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.