近期优化一个 shell 脚本,通过 shell 多进程并发极大提升了效率,抽象出核心代码记录一下 一些注意点,直接注释在代码中,有什么疑问可以评论沟通 :) #!.../bin/bash # 运行方式 # bash test.sh # 查看多进程,运行的过程 # watch -d -n 1 'ps aux | grep test.sh | grep -v grep...' date pid=$$ # 多进程并发处理 for i in `seq 1 5` # 迭代 5 次,模拟 5 个并发子进程 do { echo 'hello ' >/dev/null #...status"${i} # 处理结果保存在 /dev/shm 共享内存(即 tmpfs),基于内存的临时文件系统 sleep 3 } & # & 语句丢到后台,继续下个迭代,实现并发 done wait...# 等待所有后台子进程结束 # 串行检测,多进程处理结果 flag="success" for i in `seq 1 5` do { if [[ `cat /dev/shm/${pid}"
在Linux下使用top命令可以查看当前进程数目,以及进程的状态。例如: 可以看到我的系统暂时并没有僵尸进程(zombie) 。挂起的进程倒是一大堆。...僵尸进程产生的原因:每个Linux进程在进程表中都有一个进入点,内核执行该进程时,使用到的一切信息都存入在进程点。我们可以使用ps命令来查看进程状态。...当子进程结束之后会发出SIGCHLD信号,然后父进程会收到该信号,可以在信号处理函数中使用wait函数来回收子进程。...但是子进程的回收仍旧需要父进程来做,好处是不用使用wait()来挂起了,父进程可以忙自己的。 使用wait函数和waitpid函数。...wait函数:需要头文件#includewait.h> 函数原型:pid_t wait(int *status); 函数功能:阻塞(睡眠)进程,等待子进程结束,负责为子进程回收资源。
2. wait()函数与waitpid()函数 2.1 wait()函数 一个进程在终止的时候会关闭所有的文件描述符,释放在用户空间分配的内存,但是它的PID还保留着,内核在其中保存了一些信息:如果进程是正常终止则保存进程退出状态...父进程调用wait()函数可以回收子进程终止信息,wait()函数功能主要有三个:阻塞等待子进程退出;回收子进程残留资源;获取子进程退出状态(退出原因)。...,立即返回,不会挂起等待(wait函数如果子进程没有退出会阻塞等待)。...如果options参数填0,那么和wait()函数一样会挂起等待子进程结束。...3.1 使用wait()回收多个子进程 首先使用wait()函数来回收多个子进程,我们可以在一个for循环中等待子进程的结束,创建了几个子进程就for循环等待几次,代码如下。
wait函数和waitpid函数 为了解决僵尸进程的问题,可以使用wait函数和waitpid函数来处理,我们先看一下这两个函数的原型: #include <sys/types.h...*wstatus, int options); 对于wait函数,父进程调用该函数的时候,如果子进程还没有运行结束,那么父进程就会阻塞在这里,直到有子进程结束变为僵尸进程后,会获取子进程的退出信息...如果成功wait函数会返回子进程的pid,如果当前进程没有子进程,就会失败,返回-1并设置errno为ECHILD。 ...waitpid有wait没有的三个功能: 1. waitpid能等待一个特定的子进程,而wait只能等待任意的子进程。 2....系统一旦调用wait函数就会阻塞父进程来等待,直到子进程的退出才停止阻塞,而waitpid提供了非阻塞方式的等待,也就是 WNOHANG参数。
续接前文: Linux系统 —— 进程控制系列 - 进程的创建与终止 :fork与exit-CSDN博客 https://blog.csdn.net/hedhjd/article/details/144542292...答案就是通过等待的方式进行回收 Linux系统 —— 进程系列 - 进程状态 :僵尸与孤儿-CSDN博客 https://blog.csdn.net/hedhjd/article/details/144322570...s5秒所以子进程跑5秒5秒以内子进程和父进程同时运行5秒之后,自定义程变僵尸进程,父进程继续运行,然后再过上5秒之后,子进程遇到wait,wait直接把我们的子进程成回收,所以父进程还在运行,再次休眠10...进程等待就是创建出子进程之后,父进程使用wait或者waitpid来等待子进程的方式就叫做进程等待 wait和waitpid的作用就是等待一个进程, 当这个进程退出后, 那么父进程就可等待子进程...若正常结束,则返回该⼦进程的ID 如果⼦进程已经退出,调⽤wait/waitpid时,wait/waitpid会⽴即返回,并且释放资源,获得⼦进程退出信息 如果在任意时刻调⽤wait/waitpid
我们首先来看一个最简单的 wait 函数的应用: #include #include #include int main(int argc...5秒 sleep(5); } else if (pid > 0) { // 父进程调用wait函数处于阻塞状态,直到子进程结束wait才会返回...wpid = wait(NULL); if (wpid == -1) { perror("wait error"); }...() 的应用了,这样的 wait() 只起到了回收子进程 PCB 的作用,而并没有对子进程的退出消息做任何的接收或处理。...#include #include #include #include wait.h> int main(int argc,
在前文中讲述了Linux服务端TCP通信出现CLOSE_WAIT状态的原因,这篇文章主要通过一个实例演示它个一个“恶劣”影响:直接使服务端进程Down掉。...这时Linux服务端进程会执行第90行处的close()函数,也即执行正常四次挥手关闭TCP连接。...接着Linux服务端进程继续从内核中已完成连接队列中取出已完成连接,这样之前小节3中Windows telnet建立的客户端连接被读取。...可以发现在Linux telnet客户端完成四次挥手后,服务端进程继续向之前Windows telnet客户端建立的socket描述符发送26字节的报文数据。...因为Windows客户端此时处于FIN_WAIT2状态(Linux服务端处于CLOSE_WAIT状态),所以服务端能继续发其发送数据(即图中的PUSH+ACK报文),接着Windows客户端回应RST+
一.孤儿进程 孤儿进程可以理解为一个子进程的父进程英年早逝(父进程先于子进程退出),就将这样的一个进程称为孤儿进程,在linux操作系统上。...(2)wait系统调用函数 所需头文件: #include #includewait.h> 函数原型: pid_t wait(int* status),是一个阻塞函数...调用一次,只能回收一个子进程,如果回收多个子进程,就需要多次调用wait函数。 函数功能: (1)阻塞并等待子进程退出。 (2)回收子进程残留资源。.../*wait函数是阻塞函数,会等到子进程结束回收资源*/ pid_t dpid = wait(NULL);//对子进程的退出状态不关心 printf("...子进程被编号为9的信号杀死。 (3)waitpid系统调用函数 函数功能:和wait函数相同。
fork与exec 在Linux中,都是通过fork与vfork系统调用来创建子进程,并且在fork完之后,通常会调用exec命令簇来替换代码段,执行不同的任务。...当结果返回小于0时,则代表创建子进程失败 当结果为0时,则代表子进程开始执行 当结果大于0时,返回值则代表子进程的pid,父进程继续执行 wait与waitpid wait允许父进程获取子进程结束时的状态...在调用wait时,父进程会被阻塞等待返回。...wait的函数原型如下: #include #include wait.h> int wait(int *status) 如果父进程没有调用wait获取子进程状态时,子进程会销毁...而父进程就能通过 wait/waitpid 来获悉这些状态了。只是通常都用来关心子进程是否被销毁。
现在要知道调用wait或waitpid的进程可能会发生什么情况: 如果其所有子进程都在运行,则阻塞。 如果一个子进程已经终止,正在得带的父进程获取到终止状态,则取得该子进程的终止状态立即返回。...如果他没有任何子进程,则立即出错返回。 如果进程由于接收到SIGCHLD信号而调用wait,则可期望wait会立即返回。但是如果在任意时刻调用wait则进程可能会阻塞。...也就是父进程等待子进程的结束。父进程才能扑捉子进程,然后得到wait要得到的结果。 参数status: 参数status是一个整型指针。...与wait等效。 Pid>0.等待其进程ID与pid相等的子进程。 Pid==0等待其组ID等于调用进程组ID的任一个子进程。 Pid进程。...Waitpid返回终止子进程的进程ID。并将该子进程的终止状态存放在有status指向的存储单元中。 Waitpid 函数提供了wait函数没有提供的三个功能。
和 Close_Wait 产生原因与分析 Time_Wait 产生:调用close()发起主动关闭的一方,在发送最后一个ACK之后会进入time_wait的状态; 为什么要进行Time_wait?...closeWait close_wait的危害在于,在一个端口上打开的文件描述符超过一定数量,(在linux上默认是1024,可修改),新来的socket连接就无法建立了。...client 连接池有部分对象没有return; linux 进程的内存分别 程序编译后生成的目标文件至少含有这三个段Text,Data,BSS,这三个段的大致结构图如下所示: ?...JVM本质就是一个进程,因此其内存空间(也称之为运行时数据区,注意与JMM的区别)也有进程的一般特点。深入浅出 Java 中 JVM 内存管理,这篇参考下。...JVM进程与普通进程内存模型比较如下图: ? image.png ES在数据量很大的情况下,如何提高查询效率?
文章目录 1.命令简介 2.命令格式 3.选项说明 4.返回值 5.常用示例 参考文献 1.命令简介 wait 等待每个指定的进程并返回其终止状态。...2.命令格式 wait [n ...] 每个 n 可以是进程 ID 或作业号;如果给定了作业号,则等待该作业管道中的所有进程。如果未给定 n,则等待所有当前活动的子进程,返回状态为零。...4.返回值 如果指定不存在的进程或作业,则返回状态为 127。 否则,返回状态是等待的最后一个进程或作业的退出状态。 5.常用示例 (1)等待指定进程完成。...sleep 10 & [1] 2875 wait 2875 [1]+ Done sleep 10 (2)等待指定作业完成。...sleep 10 & [1] 3171 wait %1 [1]+ Done sleep 10 输出当前存在作业号使用 jobs 命令。
wait是一个shell命令,它等待给定进程完成,然后返回其退出状态。 Wait命令用于等待特定的进程ID和作业ID并返回其终止状态。...Wait命令用于监视先前的进程,取决于先前的进程的返回状态,它将返回退出状态。...例如,如果我们要等待完成特定的进程ID 13245,则当进程13245 完成 wait命令返回13245退出状态的返回值时,应使用“ wait 13245”。...-wait PID(PID-实用程序要等待终止的命令的进程ID)。-wait JID(JID-作业ID,标识要等待的后台进程,仅适用于当前Shell执行环境中的wait调用)。...Wait 命令的退出状态值取决于最后指定的PID / JID。当任何进程异常终止时,退出状态将大于128。 当它没有子进程调用并且当前shell知道的所有进程ID都已终止时,Wait命令以0值退出。
如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进程优先级 1. 僵尸进程 僵尸进程就是处于僵尸状态下的进程!...当进程退出并且父进程(使用wait()系统调用,后面讲) 没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。...配置进程优先权对多任务环境的linux很有用,可以改善系统性能。...NI :NICE值,表示优先级的修改数据 NICE其取值范围是-20至19,一共40个级别 Linux进程的优先级数值范围:60~99 Linux中默认进程的优先级都是:80 Linux是支持动态优先级调整的...总结 本篇文章前部分紧贴上篇Linux进程,分析完了Linux下常见的进程状态,然后初步了解了Linux进程优先级,而进程优先级与前面内容相差较大,希望大家能够多花点时间理解!
1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。...> #includewait.h> pid_t wait(int*status); 返回值: 成功返回被等待进程pid,失败返回-1。...如果子进程已经退出,调用wait/waitpid时,wait/waitpid会立即返回,并且释放资源,获得子进程退出信息 如果在任意时刻调用wait/waitpid,子进程存在且正常运行,则进程可能阻塞.../a.out #等20秒退出 child exit code:10 [root@localhost linux]# ....调用它的进程可以通过wait(&ret)来获取exit的返回值
Linux high IOwait is a common Linux performance issue....IO wait is related to the CPU resource on the server....I/O Wait is a problem that requires the use of advanced tools to debug, and of course there are many...Top Find which disk is being written The top command above explains I/O wait from a whole, but does...to Check Disk usage Disk utilization on Linux What is High IOwait on Linux Using Linux Iotop to check
前言:接着前面进程终止,话不多说我们进入Linux进程等待的学习,如果你还不了解进程终止建议先了解: Linux进程终止 本篇主要内容: 什么是进程等待 为什么要进行进程等待 如何进程等待...进程等待的概念: 我们通常说的进程等待其实是通过wait/waitpid的方式,让父进程(一般)对子进程进行资源回收的等待过程,父进程必须等待这个子进程结束后,处理它的代码和数据! 2....进程等待的方法 3.1 wait方法 我们可以通过系统调用来等待进程:wait函数 wait等待任意一个子进程的退出,如果等待成功他将返回子进程的pid,失败则返回-1 我们就用一段代码来看看wait:...; } } return 0; } 进程等待:wait函数 我们通过视频发现:进程等待是可以回收子进程僵尸状态的 然后我们将父进程sleep(...结论:如果子进程根本就没有退出,父进程必须在wait上进行阻塞等待。直到子进程僵尸,wait自动回收返回。 3.2 waitpid方法 waitpid和wait都是等待进程。
前言:前面了解完前面的Linux进程基础概念后,我们算是解决了Linux进程中的一大麻烦,现在我们准备更深入的了解Linux进程——Linux进程控制!...我们主要介绍的Linux进程控制内容包括:进程终止,进程等待与替换,进程程序替换! 本篇主要内容: 重识进程创建 进程退出场景 错误码和退出码 1....重识进程创建 1.1 fork函数 在我们之前提到过,创建进程使用的是fork函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...内核做: 分配新的内存块和内核数据结构给子进程 将父进程部分数据结构内容拷贝至子进程 添加子进程到系统进程列表当中 fork返回,开始调度器调度 fork函数返回值: 子进程返回0, 父进程返回的是子进程的...在多进程环境中,我们创建子进程的目的就是协助父进程办事,但是父进程怎么知道子进程把事情办得怎么样?所以父进程要知道子进程办的怎么样,就有了退出码,而main函数的返回值,就是进程的退出码!
笔记:根据一个进程的名字或启动此进程的命令(连续的一部分即可)杀死进程 一、使用单条命令 ps -ef | grep 进程名/启动进程的命令 | grep -v grep | awk ‘{print $2...}’ | xargs kill -9 执行结果: [1]- 已杀死 sleep 200 [2]+ 已杀死 sleep 200 二、编写脚本 linux.../bin/bash # 脚本名:kill_process.sh # 脚本功能:强制杀死进程 方式kill -9 # 1通过ps查询进程的id # 2使用kill -9 强制终止进程...函数功能:根据进程名杀死程序 参数:进程名 返回值:无 !...————————————————————— # 根据进程名查询包含进程名的进程 并排除grep查询进程和此脚本进程 ps -ef | grep “$pName” | grep -v grep | grep
Linux进程是系统中正在运行的程序的实例。每个进程都有一个唯一的进程标识符(PID),并且拥有自己的地址空间、内存、数据栈以及其他用于跟踪执行状态的属性。...Linux进程可以根据其特性和用途被分为多种类型。以下是一些主要的Linux进程类型: 1....僵尸进程(Zombie Processes): • 当一个子进程结束,但其父进程没有通过调用wait()系统调用来回收子进程的状态信息时,该子进程会变成僵尸进程。...进程控制 Linux提供了一系列的系统调用(如fork(), exec(), wait(), exit()等)用于进程控制。...fork()用于创建一个新进程,exec()用于在进程中执行一个新程序,wait()使父进程等待子进程的结束,exit()用于结束进程执行。 4.
领取专属 10元无门槛券
手把手带您无忧上云