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

exit(0)与exit(1),return三者区别(详解)

,这个信息和机器和操作系统有关,一般是 0 为正常退出,非0 为非正常退出。  ...exit和_exit 进程终止有5种方法: 1正常终止 (1)从main函数返回 (2)调用exit (3)调用_exit 2异常终止 (1)调用abort (2)由一个信号来终止  exit和_exit...就是用来正常终止一个进程的,主要区别是_exit会立刻进入内核,而exit先执行一些清除工作(包括执行各种终止处理程序,关闭所有标准I/O等,一旦关闭了IO,例如Printf等函数就不会输出任何东西了)...这两个函数会对父子进程有一定的影响,当用vfork创建子进程时,子进程会先在父进程的地址空间运行(这跟fork不一样),如果子进程调用了exit就会把父进程的IO给关掉。...这两个函数都带一个参数表示终止状态,这跟我们平时写的return效果是一样的,如果不返回一个终止状态,那表示这个进程的终止状态就是未定义的。

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

    wait() 回收子进程

    在父进程回收之前,这个进程被称为僵尸进程(僵死进程),任何一个子进程都会经过这段僵尸进程的阶段,最后由父进程来回收。...正常退出的情况下,我们要获取进程退出的代码,而非正常退出的状态下我们要获取到底进程因为哪中信号而终止了。...printf("return value : %d\n", WEXITSTATUS(status)); } // 如果子进程是非正常退出,那么一定是接收到某信号,下面就是判断是否是接收到了信号...,如果返回真则证明子进程是正常退出的,随后使用了WEXITSTATUS获取了退出代码。...而WIFSIGNALED则是判断子进程是否是接收到了某个信号,如果是收到了某个信号证明进程是非正常退出的,那么使用WTERMSIG获取收到的信号。可通过 kill -l 查看信号编号的对应内容。

    23930

    为了杀死一个node进程,我把服务器都重启了

    大领导让将项目交接就给我,交接了一个文档,文档上边是git仓库地址,之后就没有什么信息了,之前因为git分支的问题,踩过坑。最近公司内网服务器统一管理,要求将所有部门的服务器全部搬到一楼机房。...隔壁的一个部门搞hfs微服务,也需要反代理,还有阿里云服务器ECS购买。同事让我帮他整合log4j2。手里一大堆bug,领导天天群里喊我。不定时的电脑断网,怀疑是被人进行了ARP攻击。...node进程的管理使用了nsm.exe,nsm又被制作成了服务。因为是接手其他组的项目,我不了解这块。因为这个项目是项目经理负责的,其他同事又不知道具体什么原因。...无奈我将我的node进程杀死,然后再重启了一下,希望能见到奇迹。最后还是不行。但是日志里出现了端口被占用的提示。...最后百度了一个超级杀死node进程的方法: taskkill /f /t /im node.exe 然后重启再看日志,发现端口还是被占用了。杀红眼的我决定重启服务器!

    1.5K30

    Linux系统进程编程之回收子进程(三)

    但是由于进程表的容量是有限的,所以,僵尸进程还是占用一定系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪(举一个非常不恰当的例子,这就好比一部丧尸电影,里面的正常人,因为得了某种病毒...:WIFEXITED宏用来判断子进程是否正常终止(return、exit、_exit退出);WIFSIGNALED宏用来判断子进程是否非正常终止(被信号所终止);WEXITSTATUS宏用来得到正常终止情况下的进程返回值的...,0表示用默认的方式(阻塞式)来进行等待,返回值ret是本次回收的子进程的PID */ /* 等待回收PID为pid的这个子进程,如果当前进程并没有一个ID号为pid的子进程,则返回值为-...此时如果父进程执行waitpid时子进程已经先结束等待回收则waitpid直接回收成功,返回值是回收的子进程的PID; 如果父进程waitpid时子进程尚未结束则父进程立刻返回(非阻塞),但是返回值为...---waitpid并不等待第一个终止的子进程—它有若干个选择项,可以控----制它所等待的特定进程。 ---实际上wait函数是waitpid函数的一个特例。

    3.4K20

    如果你需要一个独立的 SFTP 服务器,这可能是你最好的选择!

    SFTPGo 是一个全功能和高度可配置的 SFTP 服务器软件,这是 Github 上作者对这个软件的介绍。...因为我自己只想配置一个独立的 SFTP 服务器,利用 SFTPGo 来协助管理账号,所以没有使用 MySQL / PostreSQL 之类的数据库,而选用了 SQLite 3.x....安装 SFTPGo SFTPGo 需要的系统环境 需要 Go 1.12 版本以上 需要一个数据库 ( MySQL / PostreSQL / SQLite ) 如果需要运行 Cli 测试脚本,还需要...git 安装 SFTPGo 很简单,只需要执行以下命令: $ go get -u github.com/drakkan/sftpgo 然后在你的 $GOPATH/bin/ 下找到 sftpgo 命令,如果你不知道你的...注:因为安全的原因,这个服务只允许内网访问,如果想开放到外网,请自行搭建 Nginx / Caddy 等反向代理工具代理一下就行。

    3.1K10

    进程终止

    进程终止的基本概念 当一个进程终止时,操作系统会进行如下操作: 释放进程所占用的资源(内存、文件描述符、CPU 等)。 通知父进程(如果有的话),让其可以回收进程的退出状态。...从进程调度器中移除该进程,使其不再执行。 进程的终止一般由三种情况触发: 代码运行完成,正常终止(例如 return 0)。...代码运行异常,导致非正常终止(例如 Segmentation Fault)。 外部干预,如用户手动终止或系统强制终止(例如 kill 命令)。...进程终止的常见方法 在 Linux 系统中,进程终止的常见方法包括以下几种: 正常终止 正常终止指的是进程按照预期逻辑完成任务并退出,可以使用以下方式: return 语句 当 main() 函数执行...2) 访问非法内存 如果进程访问了 非法地址,操作系统会发送 SIGSEGV 信号,导致进程异常终止。

    10110

    【Linux进程控制】五、wait()函数——子进程回收

    僵尸进程是不能用kill杀死的,因为kill命令是终止进程,而僵尸进程已经终止了。我们知道僵尸进程的资源需要由父进程去回收,那么我们在这种情况下如何回收僵尸进程的资源呢?...2. wait()函数与waitpid()函数 2.1 wait()函数 一个进程在终止的时候会关闭所有的文件描述符,释放在用户空间分配的内存,但是它的PID还保留着,内核在其中保存了一些信息:如果进程是正常终止则保存进程退出状态...;如果进程是异常终止,则保存导致该进程终止的那个信号。...,获取子进程的终止原因,如果子进程没有终止,那么将会阻塞等待子进程的终止。...如果设置了WNOHANG选项,并且没有子进程退出则返回0,如果有子进程退出则返回退出子进程的pid。 On error, -1 is returned.

    10410

    相克军_Oracle体系_随堂笔记010-SCN

    last_change# from v$datafile; 检查点信息 增量检查点并不会去更新数据文件头,以及控制文件中数据库SCN以及数据文件条目的SCN信息,而只是每3秒由CKPT进程去更新控制文件中的...数据库正常关闭,buffer cache 更新系统SCN,文件SCN,终止SCN。数据文件头部的SCN。 非正常关闭,终止SCN为空,其他都一样,非正常关闭需要进行实例恢复。...3、实例恢复 只是需要redo log:active、current 实例恢复判断依据:启动数据库时,检测到控制文件的终止SCN为空就需要做实例恢复 演示SCN变化 如果发生了实例崩溃...②提升SCN,比如一个数据文件是旧的,就需要应用归档日志、重做日志使其SCN提升到跟系统SCN一致。 每个日志条目里面都有SCN。 每个日志文件 头部有两个SCN,first和next SCN。...如果是20秒,实例恢复的时候,需要前滚日志,oracle会尽量控制在20秒以内。会加大DBWn写的频率。 如果时间过短,DBWn写的频率过大,I/O会很繁忙,可能会出问题。

    53210

    进程简介

    进程之间相对独立,一个进程的崩溃通常不会影响其他进程的正常运行。资源拥有:进程拥有自己的资源,包括内存、文件描述符、寄存器状态等。...同步机制用于协调多个进程的执行,以避免竞争条件和死锁。生命周期:进程有生命周期,包括创建、运行、等待、终止等阶段。进程可以通过创建新的进程、等待子进程完成、终止自己等方式进行管理。...进程的创建Fork(分叉):通过系统调用 fork 在当前进程的基础上创建一个新的进程,新进程是原始进程的副本。...进程间通信进程间通信(IPC)是进程之间传递信息的机制。常见的 IPC 方法包括:管道(Pipe):允许一个进程的输出成为另一个进程的输入。...进程的终止进程可以正常终止,也可以因为错误或异常而非正常终止。进程的终止可能会释放资源,但有时可能需要操作系统来清理。我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    20451

    C语言main()主函数执行完毕后是否会再执行一段代码

    会做一些自身清理工作,同时刷新标准输出缓冲区中的内容),当执行到exit(0)时,exit会自动调用这些已注册过的函数,但是由于压栈过程中先入后出的原则,所以先注册的函数最后执行 关于atexit: 一个进程可以登记多达...32个函数,这些函数将由exit自动调用,通常这32个函数被称为终止处理程序,并调用atexit函数来登记这些函数,atexit的参数是一个函数地址,当调用此函数时无须传递任何参数,该函数也不能返回值,...同时如果一个函数被多次登记,那么该函数也将多次的执行。...方法就是用atexit()函数来注册程序正常终止时要被调用的函数。 atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数。...: void exit(int state); exit的参数state是返回给操作系统或当前程序的调用程序,返回0表示程序正常结束,非0表示程序非正常结束。

    1.9K50

    Java并发编程学习15-深入探索任务关闭机制(非正常线程终止与JVM关闭详解)

    然而,任务关闭的复杂性在于,它不仅仅涉及到正常情况下的资源释放,还需要处理各种异常情况,如非正常的线程终止以及JVM的关闭。这些异常情况如果处理不当,可能会导致资源泄露、数据丢失甚至系统崩溃。...因此,本文将深入探索非正常线程终止的处理机制以及JVM关闭时的注意事项,帮助开发者更好地掌握任务关闭的精髓,确保应用程序能够优雅地处理各种关闭场景。主要内容1....处理非正常的线程终止我们知道,当单线程的控制台程序由于发生了一个未捕获的异常而终止时,程序将停止运行,并在控制台输出该异常的栈追踪信息。...它们也不会在调用栈中逐层传递,而是默认地在控制台中输出栈追踪信息,并终止线程。线程非正常退出的后果可能是良性的,也可能是恶性的,这要取决于线程在应用程序中的作用。...在关闭应用程序线程时,如果有(守护或非守护)线程仍然在运行,那么这些线程接下来将与关闭进程并发执行。

    18121

    Python3程序捕获Ctrl+C终止信号

    基础案例 我们先来看一个比较简单的案例:一个普通的打印数字的程序,每隔1s的时间就打印一个数字出来,我们可以使用python的signal.signal来捕获这个终止信号。...需要注意的是,如果此时不加上sys.exit(0)这个终止的操作,这个程序不会被停止,会继续运行下去,相当于只是捕获了异常终止信号但不做任何的处理。...给终止信号传入外部参数 在上面的一个案例中,仅仅只是捕获了“终止运行”的这个外部信号,但是如果更进一步的,我们想捕获到最后一个输出的数字是多少,这个时候要如何操作呢?...总结概要 当我们准备去杀死一个进程时,从程序设计的本身来考虑,我们应当要设计一定的保护方案来确保程序被非正常终止时,相应的计算结果也能够被很好的保存下来。...在Python中可以使用signal.signal函数来实现这样的功能,但是如果要实现数据的保存功能,需要结合一个实际的类来实现。

    1.7K30

    【Linux系统编程】七、进程等待

    ,则 waitpid() 函数返回 0,本次不予以等待,需要我们再次等待;若非正常结束,则返回该子进程的 ID;若小于 0,则失败了。...如果在任意时刻调用 wait/waitpid,子进程存在且正常运行,则进程可能阻塞(下面会讲阻塞)。 如果不存在该子进程,则立即出错返回。 ​...Ⅲ. status的意义与获取 wait 和 waitpid,都有一个 status 参数,该参数是一个输出型参数,由操作系统填充。 如果传递 NULL,表示不关心子进程的退出状态信息。...里包含了退出码和终止信号: ​ 若是被信号所杀而终止也就是非正常终止,其中 status 对应的**低7位比特位**对应的就是 kill -l 中的 64 个信号,如下图: 在进程退出时,终止信号是评判一个进程是否正常退出...;退出状态是评判一个进程运行的结果是否正确。

    7610

    Docker容器无法被stop or kill问题

    欢迎访问陈同学博客原文 Docker version 1.13.1 问题过程 某环境一个mysql容器无法被stop or kill or rm sudo docker ps | grep mysql...,依然自动重启 获取物理进程方式:1.docker inspect中的 State.Pid字段为物理进程ID; 2.ps 命令 查看容器restart policy,策略为no,即不会自动重启 如果需要更新运行中容器的...on-failure的好处是:如果容器以正常exit code终止,将不会 restart always 无论容器exit code是什么,都会自动restart。...列举几个场景: 容器以非正常状态码终止(如应用内存不足导致终止) 容器被正常 stopped,然后机器重启或Docker服务重启 容器在宕机在正常运行,然后重启机器或Docker服务重启 以上情况always...###unless-stopped unless-stopped 和 always 基本一样,只有一个场景 unless-stopped有点特殊: 如果容器正常stopped,然后机器重启或docker

    9.7K51

    SpringCloud组件:Eureka服务注册中心的失效剔除与自我保护机制

    Eureka作为一个成熟的服务注册中心当然也有合理的内部维护服务节点的机制,比如我们本章将要讲解到的服务下线、失效剔除、自我保护,也正是因为内部有这种维护机制才让Eureka更健壮、更稳定。...服务下线 迭代更新、终止访问某一个或者多个服务节点时,我们在正常关闭服务节点的情况下,Eureka Client会通过PUT请求方式调用Eureka Server的REST访问节点/eureka/apps...失效剔除 Eureka Server在启动完成后会创建一个定时器每隔60秒检查一次服务健康状况,如果其中一个服务节点超过90秒未检查到心跳,那么Eureka Server会自动从服务实例列表内将该服务剔除...由于非正常关闭不会执行主动下线动作,所以才会出现失效剔除机制,该机制主要是应对非正常关闭服务的情况,如:内存溢出、杀死进程、服务器宕机等非正常流程关闭服务节点时。...与恒宇少年面对面 如果你喜欢恒宇少年的相关文章,那么就去微信公众号(恒宇少年)关注我吧!!!

    6.3K20

    Linux wait() 和 waitpid()函数介绍

    现在要知道调用wait或waitpid的进程可能会发生什么情况:  如果其所有子进程都在运行,则阻塞。 如果一个子进程已经终止,正在得带的父进程获取到终止状态,则取得该子进程的终止状态立即返回。...如果参数status的值不是NULL,wait就会把子进程退出时的状态取出并存入其中,这是一个整数值(int),指出了子进程是正常退出还是被非正常结束的(一个进程也可以被其他进程用信号结束,我们将在以后的文章中介绍...) 这个宏用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。...请注意,如果进程不是正常退出的,也就是说, WIFEXITED返回0,这个值就毫无意义。 详细的书中的表 下面的例子就是获取到子进程的终止信号。然后进行输出。...Waitpid可等待一个特定的进程,而wait则返回任一个终止子进程的状态。 Waitpid提供了yigewait费阻塞版本。有时候用户希望取得一个子进程的状态,但不想阻塞。

    2.4K50

    线程简介

    线程(Thread) 是计算机科学中的基本概念,表示进程中的一个执行单元。在同一进程内的多个线程共享相同的内存空间和系统资源。...以下是关于线程的详细介绍:线程的主要特征共享资源:线程是进程内的执行单元,多个线程共享相同的进程资源,包括内存空间、文件描述符等。独立执行流:每个线程都有自己的执行流程,可以独立执行任务。...轻量级:相比于进程,线程是轻量级的执行单位,创建和销毁线程的代价相对较低。通信简便:由于线程共享进程的地址空间,线程之间的通信相对简便,可以通过共享变量等方式进行。...线程的终止线程的终止可能是正常的,也可能是非正常的(例如,由于异常)。线程的终止可能会释放其占用的资源,但也可能需要进行清理工作。...资源共享:线程共享进程的资源,减少资源浪费。响应性:可以实现一些需要及时响应的任务,如用户交互和实时数据处理。挑战:同步与互斥:需要仔细管理线程之间的同步与互斥,以避免数据竞争和死锁。

    16241
    领券