首页
学习
活动
专区
工具
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效果是一样的,如果不返回一个终止状态,那表示这个进程终止状态就是未定义的。

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

    wait() 回收子进程

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

    22430

    为了杀死一个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 等反向代理工具代理一下就行。

    3K10

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

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

    8410

    进程简介

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

    19451

    相克军_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会很繁忙,可能会出问题。

    48310

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

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

    1.8K50

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

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

    1.7K30

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

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

    6.3K20

    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.6K51

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

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

    2.4K50

    线程简介

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

    15941

    php进程通信-进程信号

    一个月没发博文了,之前都在深入研究php多进程tcp服务器,结果到现在也没搞出一个完美的解决方案,所以还是先发下这个月学到的东西吧 注意:本文所有内容均在linux环境下 一:进程信号对照 在php进程信号常量中...(终端线路挂断) 本信号在用户终端连接(正常或非正常、结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联....SIGUSR2 12 终止进程(用户自定义信号2) SIGUSR2 留给用户使用 SIGPIPE 13 终止进程(向一个没有读进程的管道写数据) Broken pipe SIGALRM 14 终止进程(...SIGCONT 18 忽略信号(继续执行一个停止的进程) SIGCONT 让一个停止(stopped、的进程继续执行. 本信号不能被阻塞. ...因为posix_kill函数如果需要发送信号,是需要进程id的,而getmypid(),则是获取当前进程id的函数, 以下是将上面的函数组合使用的例子: <?

    1.5K10

    【linux命令讲解大全】088.深入理解 shell 脚本中的 trap 命令

    进程收到一个信号后,会检查对该信号的处理机制。...如果是 SIG_IGN,就忽略该信号;如果是 SIG_DFT,则会采用系统默认的处理动作,通常是终止进程或忽略该信号;如果给该信号指定了一个处理函数(捕捉),则会中断当前进程正在执行的任务,转而去执行该信号的处理函数...以下是一些你可能会遇到的常见信号: 信号名称 信号数 描述 SIGHUP 1 本信号在用户终端连接(正常或非正常)结束时发出,通常是在终端的控制进程结束时,通知同一 session 内的各个作业,这时它们与控制终端不再关联...当用户退出 Linux 登录时,前台进程组和后台有对终端输出的进程将会收到 SIGHUP 信号。这个信号的默认操作为终止进程,因此前台进程组和后台有终端输出的进程就会中止。...对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。 SIGINT 2 程序终止(interrupt)信号,在用户键入 Ctrl+C 时发出。

    19310

    Linux 信号

    除此之外,进程可以选择它想要处理的信号,进程也可以选择阻止信号,如果不阻止,可以选择自行处理,也可以选择进行内核处理。如果选择交给内核进行处理,那么就执行默认处理。...操作系统会中断目标程序的进程来向其发送信号、在任何非原子指令中,执行都可以中断,如果进程已经注册了信号处理程序,那么就执行进程如果没有注册,将采用默认处理的方式。...该信号的一个重要用途是在 Unix shell 中的作业控制中。 SIGFPE SIGFPE 信号在执行错误的算术运算(例如除以零)时将被发送到进程。...本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。...登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和 后台进程组,一般都属于这个 Session。

    4.8K20
    领券