首页
学习
活动
专区
工具
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系统中,我们可以将多个命令连接成一个管线,即可以把它们的输入输出串联在一起。

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

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

C语言Linux系统编程-等待终止的进程(僵死进程

1.等待终止的进程(僵死进程): 如果一个进程在父进程之前结束,内核会把子进程设置为一个特殊的状态,处于这种状态的进程称为僵死进程 当父进程获取了进程的信息后,进程才会消失。...pid_t wait(int *status); 父进程调用这个方法会被阻塞住,如果子进程终止的时候,此方法会调用并且返回终止进程的pid #include #include <unistd.h...sleep(2); pid=getpid(); ppid=getppid(); printf("我是进程...,pid=22315 , ppid=12479 ,我新建的进程pid=22316 我是进程,pid=22316 , ppid=22315 我的进程,pid=22316,终止了 2.如果父进程进程之前终止了...,那么系统会把子进程设置给init进程(pid为1),init进程会周期性的等待所有的进程,确保没有长时间的僵死进程

3.5K20

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

1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程创建一个新进程。...执行return n等同于执行exit(n),因为调用main的运行时函数会将main的返回值当做 exit的参数 2.2.2 异常退出 ctrl + c,信号终止 3.进程等待 3.1 进程等待必要性...\n"); return 1; } } return 0; } 运行结果: 4.进程程序替换 4.1 替换原理 用fork创建进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支...exec/exit就像call/return 一个C程序有很多函数组成。...Linux鼓励将这种应用于程序之内的模式扩展到程序之间。如下图 一个C程序可以fork/exec另一个程序,并传给它一些参数。这个被调用的程序执行一定的操作,然后通过exit(n)来返回值。

10810

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.2K20

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

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

21810

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

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

14610

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掉之前的进程重新创建进程进行监控

90821

Linux创建进程

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

2.1K10

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

gcc -o $@ $^ -std=c99 .PHONY:clean clean rm -f mycode 1.2 指令:ps—显示当前系统中运行的进程信息 ps 是一个常用的 Unix/Linux...2.父进程进程 2.1介绍 在操作系统中,当一个进程(称为父进程创建另一个新进程(称为进程)时,父子进程之间建立了一种特殊的关系。...PID关系: 进程的PID(进程标识符)是由父进程调用fork()或类似系统调用创建的。 进程的PPID(父进程标识符)与创建它的父进程的PID相同。...这是因为在 Unix-like 系统中,进程是通过复制父进程的地址空间而创建的,因此进程从父进程继承了大部分的内存布局和数据。...fork函数为什么会返回两次:fork 函数在调用后会创建一个新的进程(在return之前就已经创建进程了),新的进程拥有父进程的副本。

63010

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

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

6510

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

3.创建进程 3.1fork()函数创建进程补充 我们之前已经讲了在代码里可以使用fork()函数来。...创建进程规则是:进程与父进程共享代码,写时拷贝 进程调用fork,当控制转移到内核中的fork代码后,内核做: 分配新的内存块和内核数据结构给进程 将父进程部分数据结构内容拷贝至进程...fork()系统调用创建进程时,进程会继承父进程的地址空间的一个副本。...而_exit()则直接退出,不会执行这些清理工作,也不会将缓冲区中的内容写入文件 4.2.2异常退出 使用ctrl + c,能使异常信号终止 进程最终执行情况 Linux系统中,任何进程最终执行完毕后都会返回一个状态码...复制父进程数据:新创建进程是父进程的副本,所以操作系统会复制父进程的部分数据结构内容到进程,包括代码、数据、堆、栈等内容。

5000

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

一.进程创建 fork函数创建进程,新进程进程,原进程为父进程; fork函数包含在头文件 进程调用fork,当控制转移到内核中的fork代码后,内核做: 分配新的内存块和内核数据结构给进程...将父进程部分数据结构内容拷贝至进程 添加进程到系统进程列表当中 fork返回,开始调度器调度 关于fork函数的返回值: 返回0给进程 返回进程的PID给父进程 创建失败,返回值 < 0 进程和父进程共享...进程替换的原理: 进程在替换时,只会替换掉物理内存中原来程序的代码和数据,其它的并不会动,且调用exec并不创建进程,所以调用exec前后该进程的id并未改变。...因为创建进程的时候,环境变量已经被子进程继承下去了,所以进程替换不会替换环境变量。...:other2exe.cpp g++ -o $@ $^ -std=c++11 test:test.c gcc -o $@ $^ -std=c99 .PHONY:clean clean: rm -

21710

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 $?指令查看最近的进程的退出码。 ​...退出方式 对于一个进程,我们除了可以通过外部指令(比如kill -9 pid或者ctrl c等)来终止进程,还可以通过内部实现的函数,来终止一个进程

3.4K40
领券