进程——孤儿进程 僵尸进程

linux之僵尸进程、孤儿进程 僵尸进程即为进程已经执行完毕,但是其父进程没有调用wait/waitpid,则该进程将变成一个僵尸进程,虽然没有执行,但占用系统中的一个PCB空间。僵尸进程多的话,可以将系统卡死。   僵尸进程的实现为:使用folk创建一个子进程,让子进程进来之后很快就退出,父进程什么也不做,即没有调用wait/waitpid,所以该子进程就成为了一个僵尸进程。   int main() { pit_t 阅读详情

孤儿进程

概念:
父进程先于子进程退出
子进程没有父进程获取自身的退出状态,也就变成了孤儿进程
但是,所有的孤儿进程都被一号(init)进程所收养,由一号进程作为所有孤儿进程的父进程,负责孤儿进程的资源释放
产生孤儿进程代码:

 #include<stdio.h>                                                                                                 
 #include<unistd.h>                                                                                                                                                                                                                 
 int main()                                                                                                        
 {                                                                                                                 
	 pid_t pid = fork();                                                                                             
	 if(pid < 0){                                                                                                    
	     perror("fork");                                                                                               
	 }                                                                                                            
	 else if(pid == 0){                                                                                              
	 	 printf("child  pid = %d, ppid = %d\n", getpid(), getppid());                                               
		 sleep(8);                                                                                                     
		 printf("child  pid = %d, ppid = %d\n", getpid(), getppid());                                                  
	 }                                                                                                               
	 else{                                                                                                           
	    sleep(3);                                                                                                     
	    printf("father  pid = %d, ppid = %d\n", getpid(), getppid());                                                 
	 }                                                                                                               
	 return 0;                                                                                                       
 }

在这里插入图片描述

分析:首先让父进程睡眠3秒,那么子进程打印出第一句之后,进入8秒的休眠期,此时子进程的父进程id我们可以看到是父进程的id,三秒之后,父进程退出(孤儿进程形成条件) 8秒之后,子进程退出时,可以看到它的父进程id已经变成了 1, 也就是说明孤儿进程会被一号进程所领养!
注:孤儿进程在系统后台运行

僵尸进程

概念:
由于子进程先于父进程退出,
子进程退出时,为了保存自己的退出状态,等待父进程获取自己的退出状态,释放子进程资源
但是由于父进程并没有关心子进程退出,导致子进程一直占用着系统资源,不释放,直到父进程读取子进程退出状态
也就导致子进程变成了僵尸进程

产生僵尸进程代码:

 #include<stdio.h>                                                                                                 
 #include<unistd.h>                                                                                                                                                                                                                 
 int main()                                                                                                        
 {                                                                                                                 
	 pid_t pid = fork();                                                                                             
	 if(pid < 0){                                                                                                    
	     perror("fork");                                                                                               
	 }                                                                                                            
	 else if(pid == 0){                                                                                                                                          
		 sleep(2);                                                                                                     
		 printf("child  pid = %d, ppid = %d\n", getpid(), getppid());                                                  
	 }                                                                                                               
	 else{                                                                                                           
	    sleep(5);                                                                                                     
	    printf("father  pid = %d, ppid = %d\n", getpid(), getppid());                                                 
	 }                                                                                                               
	 return 0;                                                                                                       
 }

在这里插入图片描述

分析:
我们可以由代码和图片,可以知道,在前两秒时间里,子进程和父进程同时处于运行状态,当两秒之后子进程退出,此时父进程还未退出,未获取子进程的退出状态,形成了产生僵尸进程的条件,结果可以看到,在此状态下,子进程的状态变为Z,也就是僵尸状态,知道父进程也退出之后,其退出状态才被父进程获取,从而结束掉父子两个进程!

thanks!!!

那些年-SAP固定资产导入AS91 OASV 固定资产起初导入步骤: 第一部分:资产数据导入 1)两个日期配置 填写图片摘要(选填) Specify transfer date/last closed fiscal year 这里的日期填写系统切换日期,如果系统是2015-10-01上线,这里填写2015-09-3 填写图片摘要(选填) Specifylast period posted in prv system 这里指定系统切换的上一期间。这里写2015-09 填写图片摘要(选填) ​2)AS91新增 填写固定资产的分类,公司 阅读详情

相关推荐

结构光三维重建2——多频外差解包裹

本文深入解析了结构光三维重建中的多频外差解包裹技术。针对四步相移法产生的相位包裹问题,该方法通过投影多组不同频率的条纹光,利用外差原理逐级解算,最终获得精确、连续的绝对相位值,是实现高精度、稳健三维重建的关键步骤。

weixin_29056101的博客 350

Linux使用fork()方法创建进程

在做操作系统的实验过程中,自己安装了Ubuntu(18.04.1)64位,在这里给大家安利一个VX公众号:软件安装管家。这里真的有好多好多的软件,非常全面并且安装教程非常详细,强烈推荐!!! 在此声明,我所有代码都是基于Ubuntu(18.04.1)64位,使用vim编辑器编辑,gcc编译的。兼容性不知道如何。因为自己也是linux新人,难免有一些不太准确的地方,还希望和兄弟们交流学习。 实验应该是要验证进程之间的并发性,就是输出字符的顺序是不一定的,但是也许是由于代码太简单的缘故,导致输出顺序每次都是固定

KOOKNUT的博客 2521

qcom bypass node介绍

介绍qcom bypass node,以及如何让其生效

haodada1226的博客 2043

什么是僵尸进程与孤儿进程

当一个进程调用 exit 命令结束自己的生命时,其实它并没有真正的被销毁,内核只是释放了该进程的所有资源,包括打开的文件、占用的内存等,但是留下一个称为僵尸进程的数据结构,这个结构保留了一定的信息(包括进程号 the process ID,退出状态,运行时间),这些信息直到父进程通过 wait()/waitpid() 来取时才释放

张维鹏的博客 3万+

Habitat安装全网最详细教程,手把手带你跑通example.py(全网唯一)

全网最详细具身智能仿真平台habitat的安装教程

shannanshouyin的博客 2756

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放

本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。

weixin_29163797的博客 234

【操作系统】僵尸进程与孤儿进程总结

【操作系统】僵尸进程与孤儿进程总结

blblccc 2225

如何用IDEA查看jar包中代码

我们在使用Java进行开放时经常会需要下载些第三方的jar包进行相应的开发。有时候相关jar包的使用文档不足,满足不了我们的特定开发使用要求,这就需要我们查看jar包内的相关代码逻辑,本文将基于IDEA工具介绍如何查看相关jar包的代码逻辑

mystonelxj的博客 2280

孤儿进程、僵尸进程和守护进程

维基百科的解释中: 在操作系统领域中,孤儿进程指的是在其父进程执行完成或被终止 后仍继续运行的一类进程。 在类UNIX系统中,僵尸进程是指完成执行(通过 exit 系统调用,或运行时发生致命错误或收到终止信号所致)但在操作系统的进程表中仍然有一个表项(进程控制块PCB),处于"终止状态 "的进程。 在一個多工的電腦作業系統中,守护进程(英语:daemon,英语发音:/ˈdiːmən/或英语发...

weixin_30455067的博客 247

桌面运维工程师面试题详解(一)

桌面运维工程师面试题详解(一)

jks212454的博客 1425

Python爬虫实战:医院科室排班智能采集系统 - 从零构建合规且高效的医疗信息爬虫(附CSV导出 + SQLite持久化存储)!

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 1299

【Linux系统编程】僵尸进程与孤儿进程

僵尸进程与孤儿进程

m0_70980326的博客 1120

网络安全 | 企业网络安全的十大挑战及解决方案

网络安全 | 企业网络安全的十大挑战及解决方案,随着信息技术的飞速发展,企业数字化转型进程不断加速,网络安全问题日益成为企业运营与发展面临的关键挑战。本文深入剖析企业网络安全的十大挑战,包括网络攻击日益复杂、数据泄露风险、内部威胁、物联网安全、云安全、合规性要求、移动办公安全、供应链安全、人才短缺以及安全预算有限等,并针对每个挑战详细阐述相应的解决方案,旨在为企业构建全面、有效的网络安全体系提供指导与参考,助力企业在复杂多变的网络环境中保障自身信息资产安全,实现可持续发展。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

僵尸进程和孤儿进程

  进程状态分为多种,有运行状态、浅度睡眠和深度睡眠状态、暂停状态、死亡状态,这些在小编的上一个博客中有所提到,如果对此有不懂的读者可以自行翻阅。除此之外,还有僵尸进程、孤儿进程和守护进程,许多同学搞不懂僵尸进程和孤儿进程,这篇文章会详细为大家进行讲解。

小东的博客 3429

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【僵尸进程和孤儿进程】

僵尸进程和孤儿进程含义

qq_45487673的博客 1581

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

孤儿进程与僵尸进程以及僵尸进程的解决

父进程运行结束,但子进程还在运行(未运行结束),这样的子进程就称为孤儿进程(

qq_73185160的博客 1334

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

孤儿进程和僵尸进程

一、定义:什么是孤儿进程和僵尸进程   僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。   孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。示例:    僵尸进程:一个子进程在其父进程还没有调用wait()或w

青青的专栏--C/C++ OOA/D Design Pattern 6458

孤儿进程与僵尸进程

前言 首先,我们应知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程再去创建新的子进程(也不一定)。一旦子进程被创建完毕,子进程与父进程是两个独立的进程,二者的运行与结束是一个异步过程,也就是说父进程无法预知子进程什么时候结束,子进程也不知道父进程什么什么时候需要自己的状态。那么当子进程完成自己的工作后,父进程需要调用接口wait()/waitpid(),获取子进程的状态。 孤儿进程 概念 孤儿进程是指父进程先于子进程结束,那么此父进程创建的子进程将成为孤儿进程,进而被init进程(

qq_39208237的博客 2294

孤儿进程和僵尸进程的区别

我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得

deyuzhi的专栏 2192

僵尸进程与孤儿进程

Linux系统中的两种特殊进程:僵尸进程和孤儿进程。僵尸进程是子进程退出后父进程未回收其资源的状态,会导致内存泄漏和PID耗尽等问题,可通过父进程主动调用wait()/waitpid()、注册SIGCHLD信号处理或让init进程领养来避免。孤儿进程则是父进程先退出后被init进程领养的子进程,不会造成系统问题,常见于守护进程场景。

原来是猿的成长足迹 953

详解僵尸进程与孤儿进程

详解僵尸进程和孤儿进程出现的原因并给出代码实例,分析两者的危害程度,并给出解决僵尸进程的方法。

weixin_50941083的博客 2069

Linux僵尸进程与孤儿进程

Linux僵尸进程与孤儿进程 文章目录僵尸进程1.概念2.模拟代码3.原因4.危害5.解决方案孤儿进程1.概念2.模拟代码3.原因4.孤儿进程有危害吗 僵尸进程 1.概念 简单来说:子进程先于父进程退出,子进程会变成僵尸进程,进入到Z状态。 2.模拟代码 创建一个僵尸进程例子 #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { int

weixin_47631612的博客 494

僵尸进程和孤儿进程区别

僵尸进程和孤儿进程区别

morgerton的博客 2533

僵尸进程和孤儿进程详解

僵尸进程和孤儿进程是Linux系统中两种常见的异常进程状态。僵尸进程是已终止但未被父进程回收的进程,仅占用PID资源,可通过重启父进程或修改代码解决;孤儿进程是父进程终止后仍在运行的进程,会被init/systemd自动收养并最终回收,基本无害。两者的核心区别在于:僵尸进程已终止但占用进程表条目,而孤儿进程仍在运行但失去父进程。理解这两种进程状态对系统故障排查至关重要。

NeoLshu的博客 1290

Linux 下孤儿进程与僵尸进程详解

前面的系列文章介绍了进程的基础概念和相关常用的 API,本文将介绍两种比较特殊进程:孤儿进程与僵尸进程,进一步加深对进程的了解,避免进程使用过程中的一些坑点。

weixin_45004203的博客 999

僵尸进程,孤儿进程,守护进程解释

此篇文章只是大概讲解了相关原理,以后会补充背景知识 孤儿进程 一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。 孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作。 由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害。 僵尸进程 一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过...

ailaojie的博客 2774
上一篇: Linux进程总结(上)
下一篇: 虚拟地址空间
Code_zx
博客等级 码龄9年 83粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值