首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux修炼】11.进程的创建、终止、等待程序替换

进程的创建、终止、等待程序替换 本节重点 1. 进程的创建 1.1 fork函数初识 1.2 fork的返回值问题 1.3 写时拷贝 1.4 创建多个进程 2....进程等待 3.1 进程等待的原因 3.2 进程等待的方法 3.3 再谈进程退出 3.4 进程的阻塞和非阻塞等待 4....进程的程序替换 4.1 见见猪跑 4.2 理解原理(是什么、为什么、怎么办) 4.3 一个一个调用对应的方式 4.4 应用场景:模拟shell命令行解释器 本节重点 进程的创建,终止,等待,进程的程序替换...在linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...我们知道一个程序要想运行必须加载到内存中让CPU去执行,而对于LinuxOS来说,程序加载是通过exec系列的函数加载到内存中的,因此Linux中的exec系列函数也被称为加载器。

6.1K00
您找到你想要的搜索结果了吗?
是的
没有找到

Linux】详解进程终止&&进程等待

这就是为什么当我们要对常量字符串的内容做修改程序运行阶段会报错的底层原因。         通过页表的权限位,我们也可以很好地解释写时拷贝是如何做到的。...三、进程等待 3.1、进程等待的必要性 1、之前讲过,子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。...调用wait函数父进程默认进行阻塞等待,会等待任意一个子进程退出。等待成功,wait会返回子进程的pid,等待失败返回小于0的值。 ...int变量的地址,可以查看子进程的退出码), options参数设置为0表示阻塞等待,设置为宏 WNOHANG表示非阻塞等待。...阻塞等待时父进程会阻塞在waitpid这里一直等待子进程返回,非阻塞等待采用轮询的方法查看子进程的退出信息,在轮询的间隙父进程可以继续做别的工作。

10710

Linux进程控制【创建、终止、等待

main 函数中的最后一条语句 return 0 表示当前程序的退出码,0 表示程序正常退出,可以通过指令 echo $?...ctrl + c 终止前台运行中的程序 内部终止是通过函数 exit() 或 _exit() 实现的 之前在程序编写时,发生错误行为时,可以通过 exit(-1) 的方式结束程序运行,代码中任意地方调用此函数...: exit() 是对 _exit() 做的封装实现 _exit() 就只是单纯的退出程序 而 exit() 在退出之前还会做一些事,比如冲刷缓冲区,再调用 _exit() 程序中输出语句位于输出缓冲区...,父进程通过 等待轮询 的方式,在子进程执行的同时,执行其他任务 当然也可以通过 kill -9 PID 命令使子进程异常终止 可以看到程序能分别捕捉到正常和异常的情况 注意: 如果不写进程等待函数...,会引发僵尸进程问题 ---- 总结 以上就是关于 Linux进程控制(创建、终止、等待) 的相关知识了,我们学习了 子进程 是如何被创建的,创建后又是如何终止的,以及 子进程 终止 父进程 需要做些什么

20510

Linux】进程控制(创建、终止、等待)

环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【Linux】进程理解与学习Ⅰ-进程概念...【Linux】进程理解与学习Ⅱ-进程状态 【Linux】进程理解与学习Ⅲ-环境变量 【Linux】进程理解与学习Ⅳ-进程地址空间 浅谈Linux下的shell--BASH 【Linux】进程优先级...我们在Linux下可以通过echo $?指令查看最近的进程的退出码。 ​...而exit可以说是_exit的封装,如下: ​  退出结果 对于一个进程的退出结果,无非就以下三种情况: 程序正常退出,且执行结果正确 程序正常退出,且执行结果错误 程序异常 进程退出的进一步理解...而子进程的执行结果是否正确则是由程序员根据退出码自行判断。

3.4K40

Intellij运行Java程序启动等待BUG分享

按照网上大佬的排查流程,我走了一遍,发现在启动之前我做了一些事情,有一些配置的初始化程序,如下: /** * 创建日志文件夹和数据存储文件夹 */ static {...申请的事情就这么发生了,原来早就有不少人遇到这个问题,不过看起来他们比较严重,据资料显示有等待30s甚至60s之久的。 下面是某个提问者所做的排查工作: 我在系统上更改了JDK。...java.net.InetAddress.getLocalHost()的结果 预期的实际行为: 预期的 - 返回的本地主机地址(以毫秒为单位) 实际的 - 延迟5秒后返回本地主机地址 由于Java程序获取本机地址的时候出现错误...,导致5s等待(这个应该是默认超时时间),然后再加上重试机制,所以报告的等待时间基本都是5s的整数倍。

52930

Selenium4+Python3系列(六) - Selenium的三种等待,强制等待、隐式等待、显式等待

用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了。 如何避免元素未加载出来而导致定位失败 ? 三种方式,强制等待、隐式等待、显式等待!...1、强制等待 就是sleep() ,也叫硬等待;缺点就是:如果等待时间过长,即使元素已被加载出来了,但还是要继续等,这样会导致整个脚本的执行上会浪费很多时间。...显示等待与隐式等待相对,显示等待必须在每个需要等待的元素前面进行声明。...3.2、until()和until_not()的方法 until WebDriverWait(driver,10).until(method,message="") 调用该方法提供的驱动程序作为参数,直到返回值为...,将message传入异常 until_not WebDriverWait(driver,10).until_not(method,message="") 调用该方法提供的驱动程序作为参数,直到返回值为

2.5K20

selenium 的显示等待与隐式等待

driver.switch_to_frame(“frameName.0.child”) driver.switch_to_alert()–截取弹窗对象 而 我们最重要的就是了解selenium的页面等待问题...直接找到我们要抓取的tag或者直接没有等待元素出来就开始交互导致不起作用的问题。...selenium的页面等待有显示等待和隐式等待 隐式等待 比较简单,提供一个等待时间,单位为秒,则等这个时间过去在去做其他操作。...driver.implicitly_wait(10),如果不设置默认为0 显示等待 指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常。...driver:浏览器驱动 timeout:最长超时等待时间 poll_frequency:检测的时间间隔,默认为500ms ignore_exception:超时后抛出的异常信息,默认情况下抛

3.5K40

等待者模式

等待者模式 等待者模式是通过对多个异步任务进行监听,当异步任务完成后触发未来发生的动作,在没有Promise这个模型的时候,其实就已经出现这样类似的技术方案,不同的只是没有定制为一个技术规范,等待者模式不属于一般定义的...描述 等待者模式就是通过对异步进程监听,来触发未来发生的动作,举个例子当异步进程操作A、B需要都完成以后才能进行C进程操作,在开发中经常会这样,需要等到上个操作完成或者知道上个操作完成才去触发下个操作,...而JavaScript又是单线程的,不能采用阻塞的方式去处理,在Promise规范出现之前通常都是使用回调的方式实现,这样很容易造成回调地狱,等待者模式就是在Promise规范制定之前一个类似于Promise...实现 var Waiter = function() { var dfd = []; // 等待对象容器 var doneArr = []; // 成功回调容器 var failArr...上面我们实现的等待者模式更类似于Promise.all()。

1.2K10

Appium+PythonUI自动化之webdriver的三种等待方式(强制等待、隐式等待、显示等待

我们可以通过在脚本中设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶然失败,常用的等待方式有三种: 一、强制等待 time.sleep(5) 强制等待是利用python语言自带的time库中的sleep...二、 隐式等待(全局)driver.implicitly_wait(20) 隐式等待相比强制等待更智能,顾明思义,在脚本中我们一般看不到等待语句,但是它会在每个页面加载的时候自动等待;隐式等待只需要声明一次...但是隐式等待依然存在一个问题,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢...所以,这里webdriver提供了一种更加智能的等待方式:显示等待 隐式等待的运用 from selenium import webdriver import unittest class TestBase...WebDriverWait(driver,30,0.1) 显示等待与隐式等待相对,显示等待必须在每个需要等待的元素前面进行声明。

3.7K20

等待队列

等待队列 1. 基础介绍 等待队列很早就作为一个基本的功能单位存在linux内核中,它以队列为基础数据结构,与进程调度机制紧密配合,能够用于实现内核中的异步事件通知机制。...简单的理解等待队列: 一个休眠进程的队列,等待特定事件的唤醒。 2 等待队列的部分概念 等待队列头: 等待队列头,顾名思义是等待队列的头部。...一个等待队列有一个等待队列头,其他进程唤醒时,只将一个等待队列头的第一个休眠进程唤醒。...等待队列项: 等待队列头就是一个等待队列的头部,每个访问设备的进程都是一个队列项,当设备不可用的时候就要将这些进程对应的等待队列项添加到等待队列里面。..., wait_queue_t *wait);void remove_wait_queue(wait_queue_head_t *q, wait_queue_t *wait); 3.4 睡眠 自动睡眠 Linux

2.1K30

等待和通知

等待和通知 API java.lang.Object 类提供了一套等待/通知的 API,它由 3 个 wait()、一个 notify() 和一个 notifyAll() 方法组成。...wait() 方法等待某个条件成立,当这个条件成立时,notify() 和 notifyAll() 方法通知处于等待中的线程。...void wait():导致当前线程一直处于等待,直到另外的线程调用这个对象的 notify() 或者 notifyAll() 方法,又或者一直等待其他的线程中断当前等待的线程。...void notify():唤醒正在等待该对象监听器的单条线程。如果有几条线程在该对象上等待,其中某一条会被挑选出来唤醒,这种选择是随意的且取决于具体实现。...(防止出现 lost-wake-up 问题) 在应用程序中,仅有两条线程并且某条线程偶尔等待、需要被另外一条线程通知的时候,才使用 notify() 方法,否则使用 notifyAll() 方法。

1.6K30

LinuxLinux进程控制 --- 进程创建、终止、等待、替换、shell派生子进程的理解…

fork的常规用法有两种:第一种就是一个进程执行一个程序,然后让父子进程执行不同的代码块,例如:父进程等待客户端请求,生成子进程来处理请求。...3秒,然后在打印出hello Linux,这是为什么呢?...其实是因为没有刷新缓冲区的东西,所以即使hello Linux已经加载到缓存区,也不会立即打印出来,而是等到睡眠之后调用exit结束的时候,才将缓冲区刷新,才会打印出来hello Linux。...三、进程等待(回收子进程所有资源,读取子进程退出信息) 1.wait(等待任意的子进程,只能是阻塞等待) 1....当执行一个新的程序的时候,exec系列函数是要比main函数先执行的,因为将程序加载到内存中,其实是通过linux加载器exec系列函数实现的,程序肯定是先加载后执行的,所以一定是先执行exec后执行程序中的

14.4K30

伤害 等待互斥锁

序言:近期读Linux 5.15的发布说明,该版本合并了实时锁机制,当开启配置宏CONFIG_PREEMPT_RT的时候,这些锁被基于实时互斥锁的变体替代:mutex、ww_mutex、rw_semaphore...,那么申请锁的事务等待(wait)。...和等待-死亡算法相比,伤害-等待算法生成的退避少,但是从一次退避恢复的时候要做更多的工作。...锁类也指定算法:等待-死亡(Wait-Die)或伤害-等待(Wound-Wait)。当多个进程竞争同一个锁集合的时候,它们必须使用相同的锁类。 有3种获取伤害/等待互斥锁的函数,如下。...(1) 定义一个锁类,锁类在初始化获取上下文的时候需要,锁类也指定算法:等待-死亡(Wait-Die)或伤害-等待(Wound-Wait)。

1.5K20
领券