僵尸進程的產生和SIGCHLD信號

核心句子

子進程在終止時會給父進程發SIGCHLD信號,該信號的默認處理動作是忽略,父進程可以自 定義SIGCHLD信號的處理函數。

僵尸進程的產生:

#include "head.h"
#include <unistd.h>
#include <signal.h>int main()
{key_t key = ftok(".",1);pid_t pid = fork();if( pid > 0){while(1){printf("I am  father\n");sleep(1);}}else if(pid == 0)printf("I am child\n");elseperror("fork()");
}

這里寫圖片描述
優先選擇#ps -lA | grep a.out

這里寫圖片描述

SIGCHLD建立信號處理程序

當SIGCHLD信號正在處理一個終止的子進程時,如果有兩個子進程同時終止,那么就產生了兩個SIGCHLD信號,父進程只可以捕獲一個。

結果是父進程的SIGCHLD信號處理程序每次只調用一次wait()。這樣就一定會產生僵尸進程

使用for循環產生10個子進程,十個子進程都是僵尸進程

#include "head.h"
#include <unistd.h>
#include <signal.h>int handler(int s)
{wait();
}int main()
{key_t key = ftok(".",1);signal(SIGCHLD,handler);int i ;for(i = 0;i<10;i++){pid_t pid = fork();if (pid == 0){printf("i am child\n");sleep(1);exit(0);}else if(pid < 0)perror("fork():");}while(1){printf("讓程序在這里死循環,然后觀察后臺進程\n");sleep(1);}
}

產生了七個僵尸進程,SIGCHLD只處理掉了三個

這里寫圖片描述

處理方案

int handler(int s)
{while(waitpid(-1,NULL,WNOHANG) > 0){continue; }
}

這里寫圖片描述

關于waitpid () 和 wait()的解釋請看下一篇博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382765.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382765.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382765.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows 通過批處理 修改環境變量

echo off setlocal enabledelayedexpansion set remain%path% ::待查找字符串 set toAddD:\ffmpeg2\ffmpeg-4.1.3-win64-shared\bin ::標記,默認沒有重復 set findedfalse :loop for /f "tokens1* delims;" %%a in ("%remain%") do (::如果找到相同的了if…

海量數據處理--位圖(BitMap)

對于海量數據這個詞&#xff0c;大家不難理解吧。主要是針對給定的數據量特別大&#xff0c;占用內存特別大的情況。那么和位圖有什么關系呢。看下面一個騰訊的海量數據的例子吧。 例&#xff1a;給40億個不重復的無符號整數&#xff0c;沒排過序。給一個無符號整數&#xff0…

ps命令與top命令參數意義詳解

文章目錄1.ps -l2.ps aux3.top面試經常被問道&#xff0c;特別是top。1.ps -l 參數解釋F代表這個程序旗標 (process flags)&#xff0c;說明這個程序的總結權限&#xff0c;常見號碼有&#xff1a;o 若為 4 表示此程序的權限為 root &#xff1b;o 若為 1 則表示此子程序僅進行…

python 打包成exe 程序的方法. 轉

轉自 https://blog.csdn.net/lzy98/article/details/83246281

哈希拓展--布隆過濾器

一、問題概述 布隆過濾器是由布隆提出來的&#xff0c;是由一個很長的二進制序列和一系列的映射函數組成。主要用于檢測一個元素是否在一個集合中。當然在設計計算機軟件時&#xff0c;我們也經常會判斷一個元素是否在一個集合中。比如&#xff1a;在字處理軟件中&#xff0c;…

開啟一個新的命令行窗口

1&#xff0c;start cmd /k echo Hello, World!2&#xff0c;start cmd /C pause區別是第二種執行完畢以后&#xff0c;新開的窗口會自動關閉&#xff0c;第一種則不會

C語言中 \r, \n, \b

\r\n 和 \n 區別 &#xff08;重新排版整理&#xff09; \r回車符\n換行符計算機還沒有出現之前&#xff0c;有一種叫做電傳打字機&#xff08;Teletype Model 33&#xff09;的玩意&#xff0c;每秒鐘可以打10個字符。但是它有一個問題&#xff0c;就是打完一行換行的時候&am…

排序(Sort)--【一】

排序&#xff0c;對于大家再熟悉不過了吧。我們之前在學習c語言的時候接觸過的冒泡排序&#xff0c;選擇排序等。今天給大家介紹兩種新的排序。 1、直接插入排序 升序排列&#xff1a;將第一個數確定好&#xff0c;從下標為1的數開始插入&#xff0c;如果插入的數比前一個數大…

用python os.system 執行 批處理的時候, 出現的一些問題

如果 在一個py文件里面 , 假設用 三條語句 os.system(a.bat) os.system(b.bat) os.system(c.bat)這樣的話 只會最后一條生效.

wait()和waitpid()的參數解析

進程的等待 #include <sys/types.h> #include <sys/wait.h> wait(),waitpid()區別&#xff1a; 在一個子進程終止前&#xff0c;wait使其調用者阻塞&#xff0c;而waitpid有一個選項&#xff0c;可使調用者不阻塞;waitpid()并不等待在其調用之后的第一個終止的…

快速排序--全集

快速排序&#xff1a;一聽名字就知道這種排序很快的&#xff0c;是吧&#xff1f;沒錯&#xff0c;它是一種效率比較高的排序算法。 快速排序采用的是分治的思想。 比如&#xff0c;將一串數中的一個元素作為基準&#xff0c;然后將比它小的數排在它的左邊&#xff0c;比它大…

task_struct結構體查找

網上有很多解析task_struct結構體的文章&#xff0c;可是都沒有說這個結構體到底在哪里&#xff1f; 這個結構體位于頭文件 shced.h cd / find -name sched.h 顯示結果如下 注意只有 位于內核中的include 才是正確的。 /usr/src/kernels/2.6.32-431.el6.i686/include/linux…

使用python 創建快捷方式

import os import pythoncom from win32com.shell import shell from win32com.shell import shellcondef set_shortcut(): # 如無需特別設置圖標&#xff0c;則可去掉iconname參數try:filename r"D:\AppServ\timer\win_cron_zq\timer.exe" # 要創建快捷方式的文件…

python 各個模塊的簡單介紹 轉載

轉自 https://www.jianshu.com/p/f8c43e25c02e

鬧鐘函數alarm()的解釋與實踐

alarm 定義 也稱為鬧鐘函數&#xff0c;它可以在進程中設置一個定時器&#xff0c;當定時器指定的時間到時&#xff0c;它向進程發送SIGALRM信號。可以設置忽略或者不捕獲此信號&#xff0c;如果采用默認方式其動作是終止調用該alarm函數的進程。 #include "head.h&quo…

Linux下如何設置權限讓用戶只刪除自己的文件(粘滯位)

之前我們知道如何針對用戶和用戶組來設置文件權限。通常是用三個八進制來設置權限的&#xff0c;這里我要說的是&#xff0c;其實是由四個八進制表示的。其中第一個八進制我們通常是忽略的。第二個到第四個是對應于SUID,SGID,sticky-bit。 SUID&#xff1a;設置了SUID 位的文件…

CentOS安裝yum 鏡像 舉例阿里云鏡像

如何安裝yum 鏡像 CentOS 1、備份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下載新的CentOS-Base.repo 到/etc/yum.repos.d/ CentOS 5 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.r…

python在ubuntu執行sh腳本,提示權限不夠的解決方法, 轉載

https://blog.csdn.net/weixin_40320794/article/details/81772194

Vim簡單配置

vim配置&#xff1a; &#xff08;在Centos6.5下配置vim&#xff09; 1.找到用戶的主工作目錄&#xff0c;ls看是否有.vimrc文件&#xff0c;有的話打開即可。沒有的話自己touch一個。vim進入.vimrc中&#xff1a; set nu 設置行數 colorscheme desert syntax enabl…

運算符面試題(劍指offer,面試寶典,牛客網)

利用一個宏實現兩個數的交換&#xff1f;不使用if,?,switch或者其他判斷語句比較兩個變量的大小&#xff1f;利用位運算實現加法&#xff1f;以下程序輸出結果是&#xff1f;用位運算實現求平均數&#xff1f;不用循環判斷一個數是不是2的N次方&#xff1f; 利用一個宏實現兩個…