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

【linux】进程创建与进程终止

这个退出码是一个整数,传递给父进程,用于表示子进程的终止状态。 常见惯例: 0(EXIT_SUCCESS):通常表示成功。程序执行完成且没有错误。...非0(EXIT_FAILURE):通常表示有错误发生。具体的非零值可以用来指示不同类型的错误 异常终止 在操作系统中,进程的异常终止通常是由于一些错误或意外情况导致程序不能正常运行到结束。...常见于指针错误,如访问未初始化的指针、空指针或已释放的内存。 除零错误:程序尝试进行除以零的运算,这在数学运算中是未定义的。...如何终止 正常退出: main函数return,表示进程终止(非main函数,return,函数结束) 代码调用exit函数,注意:我们代码的任意位置调用exit,都表示进程退出 _exit(),系统调用...使用场景主要是在创建子进程后,子进程完成任务立即退出时,或者在程序遇到无法恢复的错误需要立即终止时使用。 使用 exit() 当你需要正常终止程序,并且需要清理资源(如关闭文件、保存状态等)。

10110

3分钟短文 | Linux 命令正确的退出方式:exit 0

引言 通常,在编写Bash脚本时,需要在满足特定条件时终止脚本,或者根据命令的退出代码采取措施。 在本文中,我们将介绍Bash exit内置命令和已执行命令的退出状态。 ?...退出状态 每个shell命令在成功终止时都会返回退出代码。 按照惯例,退出代码为零表示命令已成功完成,非退出代码为零表示遇到错误。 特殊变量$?...返回最后执行的命令的退出状态: date &> /dev/null echo $? 该 date 命令成功完成,并且退出代码为 0。...如果尝试ls在不存在的目录上运行,则退出代码将为非零: ls /nonexisting_dir &> /dev/null echo $? 结果输出 2。 状态代码可用于找出命令失败的原因。...exit 仅仅使用 exit,相当于调用 exit $?。或者你也可以省略 exit。 下面是显示非脚本用户调用脚本时如何终止脚本的示例: ? 如果您以root用户身份运行脚本,则退出代码将为零。

2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux进程控制

    0:表示程序异常退出,进程执行失败。非零又用1 2 3 4等等,数字表示不同的错误信息 bash会自动记录上一个程序的退出码 : echo $?...2.4.2错误码和退出码的区别 退出码是进程结束时给系统返回的状态码,通常简单地表示成功或失败 错误码是函数调用或操作失败时的具体错误信息,提供了更详细的错误类型 要是本身你给退出码定义了详细的分类...3.2进程等待的方式 3.2.1.wait pid_t wait(int *status) 返回值:调用成功,返回已经结束进程的PID,同时获取到了子进程的退出状态码;调用失败,返回-1,并设置错误码以指示错误的原因...返回值:调用成功,返回收集到的子进程的PID,同时获取到了子进程的退出状态码;调用失败,返回-1,并设置错误码以指示错误的原因;如果为非阻塞等待,waitpid调用成功且没有收集到已结束的子进程,则返回...\n"); return 0; } 3.3.2非阻塞等待 定义:进程在发出某个请求后,不会被立即挂起已等待请求的完成

    9610

    【Linux】进程控制

    不同的非0值,一方面表示失败,另一方面表示失败的原因。 strerror函数会将错误码转成对应的错误描述,如下图; 父进程为什么要得到子进程的退出码呢? 因为要知道子进程的退出情况。...进程常见退出方法 正常终止: main函数return,表示进程终止(非main函数的return,都只是表示函数结束) 调用exit函数 注意:在代码的任意位置调用exit,都表示进程退出 _exit...如,子进程运行完成,结果对还是不对, 或者是否正常退出。...失败返回-1。 参数: 输出型参数,获取子进程退出状态,不关心则可以设置成为NULL 运行上面的代码,结果如下图: 上面代码if后面不需要else就表示是父进程的代码了。...WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。

    12110

    Linux系统 —— 进程控制系列 - 进程的等待:wait 与 waitpid

    如,⼦进程运⾏完成,结果对还是不对,或者是否正常退出 1.1 为什么需要等待 1. 解决僵尸进程造成的内存泄漏问题 解决方法: 1....参数: 输出型参数,获取⼦进程退出状态, 不关⼼则可以设置成为NULL 2. waitpid wait是waitpid的子集 第一个参数是等待的进程的pid,可以传送-1, 表示随即等待和wait相同...status); 返回值: 成功返回被等待进程pid,失败返回 - 1。...低7个比特位的信号值为0,为0的话表示我们系统在当前进程终止时没有收到任何信号 2. 当低7个比特位的信号值不为0(收到了信号),这就说明这个进程是异常退出的,退出码无意义 4....阻塞与非阻塞等待 如果我们的子进程对应的退出,那么我们就立即返回,我们把这种特性称之为非阻塞调用 阻塞等待就是子进程不退出, 父进程默认在wait的时候, 也就是调用这个系统调用的时候,

    10910

    Linux系统-进程控制

    Linux进程控制 零、前言 一、进程创建 1、fork函数 2、fork返回值 写时拷贝 3、fork用法 4、fork失败 二、进程终止 1、退出码 2、退出方法 1) 调用_exit函数 2)调用...零、前言 前篇我们讲解学习了关于进程的概念知识,本章主要讲解关于进程的控制,深入学习进程 一、进程创建 1、fork函数 概念: 在linux中fork函数从已存在进程中创建一个新进程(子进程)...kill掉,因为子进程已经死去,只能父进程等待回收 子进程的PCB保留着退出前任务执行的信息,而通过回收子进程我们可以知道子进程运行完成,结果对还是不对,或者是否正常退出 注:非必须,依执行的程序和需求而定...): 若WIFEXITED非零,提取子进程退出码(查看进程的退出码) 参数options: 设置为0:表示默认的阻塞式等待子进程退出,即子进程没退出就不返回,一直等待到子进程退出回收子进程...,并将进程的状态设置为非R 当到一定程度时,系统会唤醒进程,进程由等待队列转为运行队列,同时状态变为R 四、进程替换 1、替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支

    1.5K30

    【Linux】探索进程控制奥秘,解锁高效实战技巧

    函数也被称为子程序,与进程退出时返回退出码类似,函数执行完毕也会返回一个值,这个值通常用于表示函数的执行结果或状态。...如子进程运行完成,结果对还是不对,或者是否正常退出。...返回值:调用成功,返回已经结束进程的PID,同时获取到了子进程的退出状态码;调用失败,返回-1,并设置错误码以指示错误的原因。...返回值: 调用成功,返回收集到的子进程的PID,同时获取到了子进程的退出状态码;调用失败,返回-1,并设置错误码以指示错误的原因;如果为非阻塞等待,waitpid调用成功且没有收集到已结束的子进程,则返回...\n"); return 0; } 3.3.2非阻塞等待 定义:进程在发出某个请求后,不会被立即挂起已等待请求的完成

    5110

    【Linux】进程控制

    当然,fork也会调用失败:1.系统中有太多的进程。2.实际用户的进程数超过了限制. 自己可以去试一试: 对于fork我们就说到这里,接着往下走。...非0表示失败,失败有多种情况,非0是几,表示不同的错误,不同的数字,表示不同的错误。同时,退出码一般都有对应的退出码的文字描述,可以自定义也可以使用系统的映射关系。...进程为什么要等待 1.父进程通过进程等待的方式,回收子进程资源 2.获取子进程退出信息 进程等待的方法 wait 返回值:成功返回被等待进程pid,失败返回-1。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。...阻塞等待(0):父进程调用wait/waitpid等子进程时,直到子进程退出,这是阻塞时等待 非阻塞等待(WNOHANG):检测状态,如果没有就绪父进程检测之后立即返回。

    20030

    【Linux】进程控制

    有需要注意的地方 echo也当作是一个进程来看做,所以第二次的时候echo的值就是0,因为上一个的echo成功的运行了。 退出码0表示成功,非0表示失败。...当为0的时候表示的成功,程序结束不需要知道什么别的消息,但是非0失败的时候,就应该知道为什么程序会执行不到结果,为什么程序出现错误。...当退出码为非0的时候,退出信号为0的时候说明程序没有问题,但是答案不对。...2、4、如何终止 1、main函数return,表示进程终止(非main函数,return,函数结束) 2、代码调用exit函数(注意:在代码的任意位置调用exit,都表示进程终止) 3、_exit—system...(用来查看进程是否正常退出) WEXITSTATUS(status):若WIFEXITED非零则提取子进程退出码。

    7110

    容器和 Kubernetes 中的退出码完整指南

    (SIGTERM)容器收到即将终止的警告,然后终止255退出状态超出范围容器退出,返回可接受范围之外的退出代码,表示错误原因未知 下面我们将解释如何在宿主机和 Kubernetes 中对失败的容器进行故障排除...以 Docker 为例 —— 在任何给定时间,Docker 容器都会处于以下几种状态之一: Created:Docker 容器已创建但尚未启动(这是运行 docker create 后但实际运行容器之前的状态...退出码 1:应用错误 退出代码 1 表示容器由于以下原因之一停止: 应用程序错误:这可能是容器运行的代码中的简单编程错误,例如“除以零”,也可能是与运行时环境相关的高级错误,例如 Java、Python...如果不能,重新安装容器引擎,或者解决容器引擎和主机设置之间的底层兼容性问题。 退出码 126:命令调用错误 退出码 126 表示无法调用容器镜像中使用的命令。...退出码 255:退出状态超出范围 当您看到退出码 255 时,意味着容器的 entrypoint 以该状态停止。这意味着容器停止了,但不知道是什么原因。 如果容器以退出码 255 终止怎么办?

    5.5K20

    exit函数的使用及其拓展

    通常,0表示程序正常退出,非0值表示程序因错误或其他原因提前退出。 返回值:exit函数没有返回值,因为它会导致程序终止。...exit函数的工作原理 当exit函数被调用时,程序会执行以下操作: 清理工作:exit函数会调用所有已注册的清理函数(通过atexit函数注册的函数)。...exit的注意事项 注意事项1:清理函数的使用 exit函数允许我们注册清理函数,这些函数会在程序退出时被调用。清理函数的使用可以通过atexit函数实现。...它直接终止程序,并向操作系统返回一个非零状态值。 exit函数会执行清理工作,关闭文件流,并向操作系统返回指定的状态值。 因此,在需要进行清理工作时,应优先使用exit函数。...exit的拓展应用 拓展应用1:错误处理 exit函数在错误处理中非常有用。当程序遇到错误时,可以使用exit函数提前退出,并返回一个非零状态值。

    8010

    【Linux】深入理解进程控制:从创建到终止和进程等待

    但是为什么返回0就是成功非零就是失败呢?----因为不同的数字代表不同的错误信息,系统提供了一批错误码来控制。...还有: 这个的错误码并不是3,是因为kill杀死这个进程失败了,返回1,错误码输出的就是1了。 exit exit在程序的任何地方表示进程结束。...,当这个参数为-1的时候表示等待任意进程。...我们来说说waitpid的第三个参数options,第三个参数options表示的是等待时父进程的状态,是阻塞等待还是非阻塞等待,意思就是是一直等待,等子进程结束之后再完成父进程的任务,还是边等待边完成自己的任务...options的参数: 0表示阻塞等待 WNOHANG表示非阻塞等待 非阻塞等待状态样例代码: #include #include #include<unistd.h

    17110

    Linux之进程控制

    此外还可以通过调用fork函数创建子进程,子进程和父进程共享fork之后的代码,可以采用对fork返回值进行判断的办法来让父子进程分别执行后续代码的一部分。...4.只要是函数就有可能被调用失败,当一个操作系统中的进程太多时,fork函数就会失败。...就可以查看最近一个进程的退出码 每个退出码都有对应的退出信息,一般用0表示程序正常退出,用非0表示错误,库中给我们提供了134个错误码,可以将其对应的错误信息都打印出来看看: 3.代码没跑完...(查看进程是否是正常退出) 2.WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。...4.非阻塞式等待 在非阻塞等待中,父进程会采用轮询的方式检测子进程的状态,如果子进程没有退出,那么父进程就去继续做自己的事,如果在某一次询问中,父进程发现子进程已经结束了,那么父进程就会去回收子进程的资源

    82810

    Kubernetes 中容器的退出状态码参考指南

    Kubernetes 中对失败的容器进行故障排除,并提供有关上面列出的所有退出代码的更多详细信息。...以 Docker 为例 —— 在任何给定时间,Docker 容器都会处于以下几种状态之一: Created:Docker 容器已创建但尚未启动(这是运行 docker create 后但实际运行容器之前的状态...退出码 1:应用错误 退出代码 1 表示容器由于以下原因之一停止: 应用程序错误:这可能是容器运行的代码中的简单编程错误,例如“除以零”,也可能是与运行时环境相关的高级错误,例如 Java、Python...如果不能,重新安装容器引擎,或者解决容器引擎和主机设置之间的底层兼容性问题。 退出码 126:命令调用错误 退出码 126 表示无法调用容器镜像中使用的命令。...退出码 255:退出状态超出范围 当您看到退出码 255 时,意味着容器的 entrypoint 以该状态停止。这意味着容器停止了,但不知道是什么原因。 如果容器以退出码 255 终止怎么办?

    32810

    【Linux】Linux进程控制——进程创建、进程终止及进程等待详解

    ⭐进程创建 fork函数初识 在Linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...执行 return n等同于执行exit(n), 因为调用 main 的运行时函数会将 main 的返回值当做exit() 的参数。非main函数的return,表示函数的结束而不是进程的结束。...如,子进程运行完成,结果对还是不对, 或者是否正常退出。 父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。...获取子进程的status wait和waitpid,都有一个status参数,该参数是一个输出型参数,由操作系统填充。 如果传递NULL,表示不关心子进程的退出状态信息。

    14410

    进程控制

    进程创建 fork函数初识 在linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...fork调用失败的原因 系统中有太多的进程 实际用户的进程数超过了限制 进程终止 进程退出场景 代码运行完毕,结果正确 代码运行完毕,结果不正确 代码异常终止 进程常见退出方法 正常终止(可以通过 echo...如果子进程运行完成,结果对还是不对,或者是否正常退出。 父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。...如果传递NULL,表示不关心子进程的退出状态信息。 否则,操作系统会根据该参数,将子进程的退出信息反馈给父进程。

    72920

    Runtime源码解析(JDK1.8)

    可以将变量作为一个状态码;根据惯例,非零的状态码表示非正常终止。 * 虚拟机的关闭序列包含两个阶段。...在第一个阶段中,会以某种未指定的顺序启动所有已注册的关闭钩子(hook)(如果有的话),并且允许它们同时运行直至结束。 * 在第二个阶段中,如果已启用退出终结,则运行所有未调用的终结方法。...一旦完成这个阶段,虚拟机就会暂停。 * 如果在虚拟机已开始其关闭序列后才调用此方法,那么若正在运行关闭钩子,则将无限期地阻断此方法。...* 如果已经运行完关闭钩子,并且已启用退出终结 (on-exitfinalization),那么此方法将利用给定的状态码(如果状态码是非零值)暂停虚拟机;否则将无限期地阻断虚拟机。...与 exit方法不同,此方法不会启动关闭钩子,并且如果已启用退出终结,此方法也不会运行未调用的终结方法。

    1.2K90
    领券