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

linux 进程管理相关函数

对于linux 函数可以通过命令行指令: man 函数名,查看函数相关信息 //返回当前进程的pid getpid(); //创建一个进程, //当执行完这行代码后, //将会有两个进制执行下面的代码..., //不同的是,父进程pid大于0,子进程pid=0 //同时运行 fork(); //和fork()类似 //但是这里子进程先运行, //结束后,运行父进程 vfork() //exec将一个新程序载入到...*当前的进程中, //调用的进程将被覆盖, //即代表execl()执行后,下面的代码就不执行了 //exec这里只是代表这一系列执行的函数,不同文件有不同的执行函数 //如:execl,execv,execle.execve.execlp...//阻塞调用父进程,等待一个子进程终止后, //父进程执行wait后的代码 wait(); //使用在调度进程关心某个进程的结束情况时 //参数1 所等待的进程进程组pid //参数2 进程返回的状态...//参数3 WNOHANG 如果没有子进程退出就立即返回 WUNTRACED 对已经停止但本不用报告状态的子进程,该调用也从等待中返回并报告状态 //该函数具体解析 链接请转 https://blog.csdn.net

65810

Linux僵尸进程以及wait函数

Linux下使用top命令可以查看当前进程数目,以及进程的状态。例如: 可以看到我的系统暂时并没有僵尸进程(zombie) 。挂起的进程倒是一大堆。...僵尸进程产生的原因:每个Linux进程进程表中都有一个进入点,内核执行该进程时,使用到的一切信息都存入在进程点。我们可以使用ps命令来查看进程状态。...父进程不能挂起,父进程要做的工作很多,很忙。那么可以使用signal函数为信号SIGCHLD注册处理函数。...当子进程结束之后会发出SIGCHLD信号,然后父进程会收到该信号,可以在信号处理函数中使用wait函数来回收子进程。...wait函数:需要头文件#include 函数原型:pid_t wait(int *status); 函数功能:阻塞(睡眠)进程,等待子进程结束,负责为子进程回收资源。

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

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

    2. wait()函数与waitpid()函数 2.1 wait()函数 一个进程在终止的时候会关闭所有的文件描述符,释放在用户空间分配的内存,但是它的PID还保留着,内核在其中保存了一些信息:如果进程是正常终止则保存进程退出状态...父进程调用wait()函数可以回收子进程终止信息,wait()函数功能主要有三个:阻塞等待子进程退出;回收子进程残留资源;获取子进程退出状态(退出原因)。...,这是因为在waitpid()函数中使用了选项参数WNOHANG,而子进程中有一个睡眠函数,子进程睡眠的时候,父进程中waitpid()语句没有等到子进程结束就执行了,由于WNOHANG选项参数的存在,...回收多个子进程 上面使用wait()函数和waitpid()函数举的例子都是回收一个子进程,有时候我们可能需要回收多个子进程,下面介绍回收多个子进程的方法。...3.2 使用waitpid()回收多个子进程 如果使用waitpid()函数,可以借助函数的参数和返回值去判断每个子进程是否回收成功。

    7810

    Linux进程控制】四、exec函数族——进程替换详解

    我们要想在新创建的子进程中执行其他程序,需要调用一种exec函数来拉起一个新的进程。当进程调用一种exec函数的时候,该进程的用户空间代码和数据全部被新程序替换掉,从新程序的启动例程开始执行。...调用exec函数的时候,会把当前进程的 .text 和 .data 替换为所要加载的程序的 .text 和 .data ,然后让进程从新的进程的 .text 段的第一条指令开始执行,但是进程ID不变,也就是说壳子没变...这里面重要的是前两个execl和execlp函数,它们都用于使用一个新的进程去替换原来的进程,也就是在新创建的进程中执行其他程序。...exec函数族的作用使用了替换进程的,但是exec函数有个特点就是,一旦执行成功就不会再返回了。...实际上shell是先fork()一个进程,然后在fork()创建的子进程中使用exec函数来拉起一个其它进程,这样fork()后的两个进程有一个是shell进程,一个是我们需要执行的进程,这才是exec

    13010

    Linux进程——Linux进程进程优先级

    如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进程优先级 1. 僵尸进程 僵尸进程就是处于僵尸状态下的进程!...所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态 僵尸状态就是Linux状态中的X死亡状态!...配置进程优先权对多任务环境的linux很有用,可以改善系统性能。...NI :NICE值,表示优先级的修改数据 NICE其取值范围是-20至19,一共40个级别 Linux进程的优先级数值范围:60~99 Linux中默认进程的优先级都是:80 Linux是支持动态优先级调整的...总结 本篇文章前部分紧贴上篇Linux进程,分析完了Linux下常见的进程状态,然后初步了解了Linux进程优先级,而进程优先级与前面内容相差较大,希望大家能够多花点时间理解!

    9310

    LinuxLinux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

    1.进程创建 1.1 fork函数linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。...else if (ret > 0) { // 异常退出 printf("sig code : %d\n", st & 0X7F); } } } 测试结果: [root@localhost linux.../a.out #等20秒退出 child exit code:10 [root@localhost linux]# ....调用exec并不创建新进程,所以调用exec前后该进程的id并未改变 4.2 替换函数 其实有六种以exec开头的函数,统称exec函数 #include ` int execl(const...Linux鼓励将这种应用于程序之内的模式扩展到程序之间。如下图 一个C程序可以fork/exec另一个程序,并传给它一些参数。这个被调用的程序执行一定的操作,然后通过exit(n)来返回值。

    14110

    Linux进程控制——Linux进程等待

    前言:接着前面进程终止,话不多说我们进入Linux进程等待的学习,如果你还不了解进程终止建议先了解: Linux进程终止 本篇主要内容: 什么是进程等待 为什么要进行进程等待 如何进程等待...父进程创建子进程的目的是为了让子进程协助自己完成任务的,而父进程需要知道子进程将任务完成得如何。这就需要通过进程等待的方式,获取子进程的退出信息。 3....进程等待的方法 3.1 wait方法 我们可以通过系统调用来等待进程:wait函数 wait等待任意一个子进程的退出,如果等待成功他将返回子进程的pid,失败则返回-1 我们就用一段代码来看看wait:...:wait函数 我们通过视频发现:进程等待是可以回收子进程僵尸状态的 然后我们将父进程sleep()取消,看看在子进程退出之前父进程在干什么 #include #include...options: WNOHANG:若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。

    9710

    Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

    文章目录 一、进程状态 二、进程创建 三、进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一、进程状态 ---- Linux...正在 CPU 中执行该进程 ; 阻塞状态 : 等待被分配 CPU 时间片的过程 中 , 处于该状态 ; 终止状态 : 进程 终止后的状态 ; 状态之间的转换 , 参考 【Linux 内核】进程管理 (...Linux进程的 CPU 资源调度 | 进程生命周期 | 创建状态 | 就绪状态 | 执行状态 | 阻塞状态 | 终止状态 | 进程生命周期之间的转换 ) 博客 ; 二、进程创建 ---- 进程创建...源码 ) 博客中的 fork() , vfork() , clone() 等系统调用函数 ; 三、进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程...自己不能处理的信号 , 被迫终止 ; 前两种是 进程主动退出 , 后两种是 进程被动退出 ; exit() 系统调用 函数 , 定义在 linux-5.6.18\kernel\exit.c 源码中 ,

    2.9K20

    linux通过进程名杀死进程_linux关闭进程命令

    笔记:根据一个进程的名字或启动此进程的命令(连续的一部分即可)杀死进程 一、使用单条命令 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

    16K20

    Linux进程控制——Linux进程终止

    前言:前面了解完前面的Linux进程基础概念后,我们算是解决了Linux进程中的一大麻烦,现在我们准备更深入的了解Linux进程——Linux进程控制!...我们主要介绍的Linux进程控制内容包括:进程终止,进程等待与替换,进程程序替换! 本篇主要内容: 重识进程创建 进程退出场景 错误码和退出码 1....重识进程创建 1.1 fork函数 在我们之前提到过,创建进程使用的是fork函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...main函数的退出码是可以被父进程获取的,用来判断子进程的运行结果 我们可以直接用指令查看进程的退出码: 指令:echo $?...返回的是上一个进程的错误码 2.2 C语言的错误码 错误码和退出码: 错误码通常是衡量一个库函数或者是一个系统调用一个函数的调用情况 退出码通常是一个进程退出的时候,他的退出结果 二者都是当失败的时候

    10210

    进程fork函数

    ptr地址是一样的 A1: 现象如下父进程malloc的指针指向0x12345678, fork 后,子进程中的指针也是指向0x12345678,但是这两个地址都是虚拟内存地址 (virtual memory...所以两个进程中的这两个地址相互之间没有任何关系。...(注1:在理解时,你可以认为fork后,这两个相同的虚拟地址指向的是不同的物理地址,这样方便理解父子进程之间的独立性) (注2:但实际上,linux为了提高 fork 的效率,采用了 copy-on-write...验证2 共享数据块 fork 之后 父子进程之间什么样的数据是相同的? fork之后父子进程共享文件表的同一项 ?...DBPool的析构函数,DBPool的析构函数会执行断开数据库连接的操作 验证3 共享内存是进程本身的资源吗?

    1.3K80

    Linux下使用exec族函数进行进程替换

    版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/83692324 在Linux...下使用fork或者vfork函数创建的子进程是完全复制父进程的代码来执行的。...虽然我们可以使用fork函数返回值的不同来使得父进程和子进程执行的代码不同。但是有时候父进程是一段c程序,子进程却是个shell。这个时候,fork就没法解决这个问题。因此exec函数是必须的。...所以使用的时候应当注意,如果还想回到原来的进程继续执行,那么需要先使用fork函数来创建一个进程,在这个进程中使用exec函数来完成进程替换。这样才能保证原进程能在exec调用后不被破坏。...vfork则在exec函数调用之前的这段时间是和父进程共享数据的,直到遇到exec函数(或者是exit函数),才会成为一个独立进程,拥有自己的地址空间。不再和父进程共享地址空间。

    1.3K20

    Linux进程学习【进程状态】

    task_struct) PCB 中有着进程的各种信息,包括:PID、PPID、进程状态等 我们可以通过函数 getpid() 获取当前进程的 PID 进程 间存在父子关系,可以通过 fork() 主动创建...,即把手机揣进兜里,然后 专心执行走路这个 进程 进程状态 进程 有各种运行状态,方便OS进行管理,在 Windows 中,进程 状态是这样的 而在我们 Linux 中,新建、就绪、运行都可以看作...运行 R 这一个状态,所以比较清晰 而我们今天要学习的正是 Linux 中的 进程 状态 进程是何种状态,取决于此进程的PCB在哪里排队 ️运行 R 首先来看看第一种状态 R 以我们以往的认知来说...子进程,是观察不到 僵尸状态 的,因为 bash 会执行回收机制,将 僵尸 回收 我们可以利用 fork() 函数自己创建 父子进程 关系,观察到这一现象 #include using...父进程,此时 子进程 会被OS领养 子进程 的 父进程 变为 1号进程进程 就变成了一个 孤儿进程 发出指令终止 父进程 假设 子进程 不被 1号进程 领养 子进程 退出时就会无人回收

    22330
    领券