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

Linux 创建进程执行任务的实现方法

Linux 操作系统紧紧依赖进程创建来满足用户的需求。例如,只要用户输入一条命令,shell 进程创建一个新进程,新进程运行 shell 的另一个拷贝并执行用户输入的命令。...Linux 系统中通过 fork/vfork 系统调用来创建进程。本文将介绍如何使用 fork/vfork 系统调用来创建进程并使用 exec 族函数在新进程中执行任务。...通常将原有的进程称为父进程,把新创建进程称为进程进程是父进程的一个拷贝,进程获得同父进程相同的数据,但是同父进程使用不同的数据段和堆栈段。...exec 族函数 使用 fork/vfork 创建进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),进程往往需要调用一个 exec 族函数以执行另外一个程序。...本文试图通过简单的 demo 来演示这些函数的基本用法,为理解 Linux 系统中父进程进程的概念提供一些直观的感受。

3.8K11

subprocess:Python中创建进程

前言 subprocess库提供了一个API创建进程并与之通信。这对于运行生产或消费文本的程序尤其有好处,因为这个API支持通过新进行的标准输入和输出通道来回传数据。...returncode为进程的退出状态码。通常情况下,退出状态码为0则表示进程成功运行了;一个负值-N表示这个子进程被信号N终止了。...该函数还有许多参数,比如shell,默认值为False表示直接运行命令,如果主动赋值为True则会创建一个中间shell进程,由这个进程运行命令。...这就是subprocess库创建进程的通信机制) 需要注意的是,如果需要抑制输出效果,可以将stdout与stderr设置为subprocess.DEVNULL。...连接管道段 在Linux系统中,我们可以将多个命令连接成一个管线,即可以把它们的输入输出串联在一起。

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

linux:根据主进程查找进程

本文链接:https://blog.csdn.net/10km/article/details/100603320 如下是我的项目中创建的一个java系统服务在通过systemctl status显示的服务状态...,进程ID分别为1088,1482,1494,从左到右为父/进程关系.如果想通过netstat命令根据PID查找服务所占用的端口,就需要最右的java进程ID。...怎么样通过这个MainPID获取实际工作的进程ID呢,ps的 -g选项可以根据PID过程要显示的所有属于指定PID的进程进程,比如: $ ps --forest -o pid,cmd -g 1088...target/start_facelog_server.sh 1494 \_ java -jar facelog-service-2.4.2-standalone.jar 最后一行就是最后的进程...main_pid="$(systemctl show $service_name --property=MainPID)" main_pid=${main_pid##*=} # ps 命令获取最下层的进程

4.9K20

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

1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程创建一个新进程。...fork代码后,内核做: 分配新的内存块和内核数据结构给进程 将父进程部分数据结构内容拷贝至进程 添加进程到系统进程列表当中 fork返回,开始调度器调度 当一个进程调用fork之后,就有两个二进制代码相同的进程.../a.out #等20秒退出 child exit code:10 [root@localhost linux]# ....\n"); return 1; } } return 0; } 运行结果: 4.进程程序替换 4.1 替换原理 用fork创建进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支...调用exec并不创建进程,所以调用exec前后该进程的id并未改变 4.2 替换函数 其实有六种以exec开头的函数,统称exec函数 #include ` int execl(const

11510

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

那么说了这么多,我们该怎么样来回收Linux系统的僵尸进程呢?...返回值是进程的ID,当前父进程有可能有多个子进程,wait函数阻塞直到其中一个进程结束wait就会返回,wait的返回值就可以用来判断到底是哪一个进程本次被回收了: wait(): on success...#include 7 static void sig_child(int signo); 8 9 int main() 10{ 11 pid_t pid; 12 //创建捕捉进程退出信号...此时如果父进程执行waitpid时进程已经先结束等待回收则waitpid直接回收成功,返回值是回收的进程的PID; 如果父进程waitpid时进程尚未结束则父进程立刻返回(非阻塞),但是返回值为...上面的源代码链接:https://github.com/1121518wo/linux-/tree/master

3.3K20

Linux系统编程】通过系统调用获取进程标识符 及 创建进程(fork)

bash创建进程去帮它执行命令,那下一个问题,如何创建进程呢? 3....那这也证实了它们两个是父子进程关系,fork的作用就是创建当前进程进程,而PID为30455的这个进程就是被创建进程。...,它肯定跟前面那个相同,因为执行第一个打印的时候还没有执行fork()创建进程呢。...失败的话,-1在父进程中返回,不会创建任何进程,并且正确设置了errno(C语言中一个用于表示错误码的全局变量,Linux内核是C语言写的)。 也就是说fork成功的话,返回值会有两个。...那这样就做到了在数据层面上也可以实现进程间的独立性。 所以,可以理解为: 当进程创建时,起初操作系统只为其分配一个新的进程控制块(PCB),用于维护进程的相关信息。

22310

Linux进程与可执行程序的关系&&fork创建进程&&写实拷贝的理解

二、通过系统调用创建进程 fork:创建进程 fork之后有两个执行分支,fork之后代码共享,也就是说fork之后的代码父进程进程都会执行。下面的5986进程就是bash进程。...原因是在进程中,一个父进程可能会有多个子进程,父进程想要管理进程必须通过进程的标识符,所以父进程必须知道子进程的标识符,而进程只需要关心自己是否成功创建了,所以返回0。...这和linux中的虚拟地址有关,也就是说,一个变量可以指向不同的地址空间。 写实拷贝 任意进程之间是具有独立性的,不会互相影响。...创建一个进程的时候,系统中就会多一个进程,当进程创建时,系统就必须为进程创建出一个全新的PCB(task_struct),父进程会把自己PCB中很多内容拷贝给进程的PCB,也就是说,进程创建,...进程都有自己的代码和数据,系统创建出来的进程的PCB默认就会指向父进程的代码和数据,想让父子进程分别执行不同的程序,那就可以在代码中根据父子进程fork返回值的不同设置ifelse语句,让父子进程分别执行不同的代码

15510

php中pcntl_fork创建进程

一、php中pcntl_fork函数概述 pcntl_fork()函数是php中用于创建进程的一个函数,返回创建进程的pid。...该函数创建进程具体fork的过程: (1)调用该函数即创建一个进程创建成功父进程返回进程的pid,进程返回0; (2)创建进程实际上对父进程的一个拷贝,共享代码空间,拷贝父进程的数据,也就是说父进程改变父进程的数据...$curr_pid.PHP_EOL; //开始创建进程 $son_pid = pcntl_fork();//返回进程的id //查看当前进程 echo '创建进程之后当前的进程为...示例代码分析: (1)发现创建进程之后,系统会切换到进程中,而进程中的代码是从含有pcntl_fork函数的那行执行的 (2)创建进程之后,进程的代码段是拷贝pcntl_fork函数及之后的代码段...例如监控工具,想要监控几个不同指标的情形,可以使用主进程监控各指标的配置变化,然后对每个指标分别fork一个进程来监控其具体的情形,当主进程发现指标的配置改变则kill掉之前的进程重新创建进程进行监控

92521

Linux创建进程

Linux的下是由父进程来完成的,创建完成的新进程进程对于进程它有两种执行顺序的可能性: 父进程进程并发执行; 进程先执行,父进程等待进程执行完毕。...在Linux下的fork函数用于创建一个新的进程,使用fork()的函数来创建一个进程时,进程只是完全复制父进程的资源。这样得到的进程和父进程是独立的,具有良好的并发性。...Linux的采用了copy-on-write技术(COW),即:只有在进程中发生写入操作的时候,才真正的去复制父进程的资源,否则不进行复制操作,比如在fork的进程中只是调用exec函数来执行另外一个可执行文件...总结一下:fork函数创建进程是父进程的复制,进程和父进程并发执行来段代码测试一下。...除了fork之外,Linux的系统还提供了vfork的函数来建立一个新进程.vfork建立的新进程和fork的不同之处在于: vfork创建进程和父进程是共享地址空间的,而不是复制,因此进程中的数据和父进程中的数据是共享的

2.1K10

Linux进程概念(二.查看进程、父进程进程进程状态详解)

2.父进程进程 2.1介绍 在操作系统中,当一个进程(称为父进程创建另一个新进程(称为进程)时,父子进程之间建立了一种特殊的关系。...PID关系: 进程的PID(进程标识符)是由父进程调用fork()或类似系统调用创建的。 进程的PPID(父进程标识符)与创建它的父进程的PID相同。...下面是对这两个返回值的解释: 给父进程返回进程的 PID:在父进程中,fork 返回新创建进程进程 ID(PID),这个 PID 是进程的标识符,父进程通过这个 PID 可以识别并操作进程。...这是因为在 Unix-like 系统中,进程是通过复制父进程的地址空间而创建的,因此进程从父进程继承了大部分的内存布局和数据。...fork函数为什么会返回两次:fork 函数在调用后会创建一个新的进程(在return之前就已经创建进程了),新的进程拥有父进程的副本。

79210

Linux进程——进程创建(fork的原理)

查看进程的第二种方法 在Linux系统中,不只有ps能够查看进程,还存在着一个动态目录proc,该目录存放了所有存在的进程,目录的名称。它会随着进程的改变而随时更新它的内容!...创建进程 2.1 系统调用函数fork 在Linux中,进程创建方式有两种: 命令行中直接启动进程 通过代码创建 而在用代码创建进程时,实则是进行了系统调用,这里我们就得在学习一个系统调用函数...首先我们来思考以下问题: 那么我们为什么要创建进程进程的作用是啥?...fork创建进程,系统中会多一个进程 以父进程为模板,为进程创建PCB 但是你今天创建进程,是没有代码和数据的!!!目前和父进程共享代码和数据!!...创建完成进程,只是一个开始,创建完成进程之后,系统的其他进程,父进程进程,接下来要被调度执行的,当父子进程的PCB都被创建并在运行队列中排队的时候,哪一个进程的PCB先被选择调度,那个进程就先运行

6910

Linux进程地址空间、进程控制(一.进程创建进程终止、进程等待)

3.创建进程 3.1fork()函数创建进程补充 我们之前已经讲了在代码里可以使用fork()函数来。...创建进程规则是:进程与父进程共享代码,写时拷贝 进程调用fork,当控制转移到内核中的fork代码后,内核做: 分配新的内存块和内核数据结构给进程 将父进程部分数据结构内容拷贝至进程...fork()系统调用创建进程时,进程会继承父进程的地址空间的一个副本。...复制父进程数据:新创建进程是父进程的副本,所以操作系统会复制父进程的部分数据结构内容到进程,包括代码、数据、堆、栈等内容。...这些调用会阻塞父进程,直到有进程退出,并返回已退出进程的PID和退出状态 5.2进程等待的方法 5.2.1 wait()方法 wait 方法在Linux 编程中是一个重要的系统调用,它主要用于监视先前启动的进程

6200

Linux进程控制:理解什么是进程创建进程终止,进程等待 | 进程替换

一.进程创建 fork函数创建进程,新进程进程,原进程为父进程; fork函数包含在头文件 进程调用fork,当控制转移到内核中的fork代码后,内核做: 分配新的内存块和内核数据结构给进程...将父进程部分数据结构内容拷贝至进程 添加进程到系统进程列表当中 fork返回,开始调度器调度 关于fork函数的返回值: 返回0给进程 返回进程的PID给父进程 创建失败,返回值 < 0 进程和父进程共享...进程替换的原理: 进程在替换时,只会替换掉物理内存中原来程序的代码和数据,其它的并不会动,且调用exec并不创建进程,所以调用exec前后该进程的id并未改变。...因为创建进程的时候,环境变量已经被子进程继承下去了,所以进程替换不会替换环境变量。...因为在linux中,环境变量的内容是在一个区域放着的,而环境变量表 env 中存的是环境变量的地址,这些地址指向所对应的环境变量;         而我们putenv一个环境变量时,其实是在环境变量表中找一个未使用的下标

22410

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

环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【Linux进程理解与学习Ⅰ-进程概念...【Linux进程理解与学习Ⅱ-进程状态 【Linux进程理解与学习Ⅲ-环境变量 【Linux进程理解与学习Ⅳ-进程地址空间 浅谈Linux下的shell--BASH 【Linux进程优先级...进程创建 再谈fork函数 #include pid_t fork(void); 返回值:创建进程成功后,给进程返回0,父进程返回进程的pid,出错返回-1 pid_t...我们在Linux下可以通过echo $?指令查看最近的进程的退出码。 ​...僵尸进程(Z) 对于父进程来说,进程的执行结果是否正确并不重要,重要的是进程的退出状态,即进程是否是正常退出。而进程的执行结果是否正确则是由程序员根据退出码自行判断。

3.4K40

Linux创建进程达到65535的方法

Linux创建进程据说消耗很少,这个一直是Linux的特点,于是就专门测试Linux创建进程的极限,测试代码如下: //fork.c #include #include <stdlib.h...", count); } for (count = 0; count < MAXPROCESS; count++) { wait(); } exit(0); } 这段代码是不断创建进程.../fork 我的虚拟机Linux内存是512M,在创建6千多个进程时,程序运行得很慢,通过vmstat命令观察,发现swap内存的置入置出很频繁,可以判断是由于内存不足,使用虚拟内存,导致频繁的IO操作...测试代码中,创建进程,占用的内存相当小,实际使用中,只可能比测试代码创建进程使用更多的内存,所以相应的,同样配置的机器,能创建的可用进程应该是更少的。...总结 以上所述是小编给大家介绍的Linux创建进程达到65535的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ZaLou.Cn网站的支持!

1.6K31

Linux创建进程达到65535的方法

Linux创建进程据说消耗很少,这个一直是Linux的特点,于是就专门测试Linux创建进程的极限,测试代码如下: //fork.c #include  #include <stdlib.h...", count);   }   for (count = 0; count < MAXPROCESS; count++) {     wait();   }   exit(0); } 这段代码是不断创建进程...blue帐户创建进程数的硬限制和软限制都是65535,但是我们还不能使用blue帐户创建65535个进程,我们在Linux还需要设置内核参数kernel.pid_max,这个参数我默认安装都是32768.../fork 我的虚拟机Linux内存是512M,在创建6千多个进程时,程序运行得很慢,通过vmstat命令观察,发现swap内存的置入置出很频繁,可以判断是由于内存不足,使用虚拟内存,导致频繁的IO操作...测试代码中,创建进程,占用的内存相当小,实际使用中,只可能比测试代码创建进程使用更多的内存,所以相应的,同样配置的机器,能创建的可用进程应该是更少的。

1.6K20
领券