[Linux]C语言Linux系统编程创建进程
1.进程ID
每一个进程都由一个唯一的标识符表示,即进程ID,简称pid.系统保证在某时刻每个pid都是唯一的。
1.1分配进程ID
缺省情况下,内核将进程ID的最大值限制为32768,可以在此处设置/proc/sys/kernel/pid_max,在短时间内,内核不会重用已经分配的ID.
2.获得进程id和父进程id
#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(){int pid=getpid();int ppid=getppid();printf("pid:%d ppid:%d \n",pid,ppid);}
3.运行新进程
首先创建新的进程fork()
在新的进程中执行程序exec系列的系统调用
4.exec系列的系统调用
execl()函数的原型为 int execl(const char *path,const char *arg,...)
path是程序路径,arg是传递给指定程序的可变长度参数列表,最后必须是null结尾
const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据。
通常情况下execl()不会返回结果,成功的调用会以跳到新的程序的入口点作为结束,错误的时候会返回-1
int ret;ret=execl("/usr/bin/vim","vim","text.txt",NULL);if(ret==1){printf("execl error");}
5.fork()系统调用
创建一个和当前进程映像一样的进程可以通过fork()系统调用,调用者从fork()返回后,仍然继续运行。
当前进程就是父进程,创建成功的进程是子进程。
在父进程成功的fork()调用,会返回子进程的pid
在子进程fork()调用会返回0
#include <stdio.h> #include <unistd.h> int main(){int pid,ppid;int ret=fork();if(ret>0){pid=getpid();ppid=getppid();printf("我是父进程,pid=%d , ppid=%d ,我新建的子进程pid=%d\n",pi d,ppid,ret);sleep(3);//父进程不能太快终止,否则看不出子进程ppid的效果}else if(ret==0){pid=getpid();ppid=getppid();printf("我是子进程,pid=%d , ppid=%d \n",pid,ppid);}else if(ret==-1){perror("fork");} }
我是父进程,pid=13890 , ppid=10038 ,我新建的子进程pid=13891
我是子进程,pid=13891 , ppid=13890
[Linux]C语言Linux系统编程创建进程相关推荐
- linux系统编程之进程(八):守护进程详解及创建,daemon()使用
linux系统编程之进程(八):守护进程详解及创建,daemon()使用 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等 ...
- linux系统编程之进程概念(操作系统---管理,进程创建,进程状态,进程优先级, 环境变量,程序地址空间,进程O(1)调度方法)
系统编程: 进程概念->进程控制->基础IO->进程间通信->进程信号->多线程 进程概念 冯诺依曼体系结构----现代计算机硬件体系结构 冯诺依曼体系结构----现代计 ...
- 【Linux系统编程】进程概述和进程号
00. 目录 文章目录 00. 目录 01. 进程概述 02. 进程状态 03. 进程控制块 04. 进程号 05. 进程号相关函数 06. 案例实战 07. 附录 01. 进程概述 我们平时写的 C ...
- vbs结束进程代码_物联网学习教程—Linux系统编程之进程控制
Linux系统编程之进程控制 一.结束进程 首先,我们回顾一下 C 语言中 continue, break, return 的作用: continue: 结束本次循环 break: 跳出整个循环,或跳 ...
- 【Linux系统编程】进程替换:exec 函数族
00. 目录 文章目录 00. 目录 01. exec函数族 02. 参考示例 2.1 execl函数示例 2.2 execv函数示例 2.3 execlp() 或 execvp()函数示例 2.4 ...
- 【Linux系统编程】进程退出和回收进程资源
00. 目录 文章目录 00. 目录 01. 进程退出函数 02. 进程退出讨论 03. 回收进程资源 04. 附录 01. 进程退出函数 #include <stdlib.h>void ...
- Linux系统编程之进程与线程控制原语对比
Linux系统编程之进程与线程控制原语对比 进程 线程 fork pthread_create exit pthread_exit wait pthread_join kill pthread_can ...
- 《全面掌握Linux C语言嵌入式系统移植教程》学习笔记(Liunx速查简明)
全面掌握Linux C语言嵌入式系统移植教程学习笔记(Liunx速查简明) 笔记前言: P3: shell命令简明 P4: vi /vim编辑器入门 P5:vi /vim编辑器扩展 P8: gcc编译 ...
- linux服务器开发二(系统编程)--线程相关
线程概念 什么是线程 LWP:Light Weight Process,轻量级的进程,本质仍是进程(在Linux环境下). 进程:独立地址空间,拥有PCB. 线程:也有PCB,但没有独立的地址空间(共 ...
最新文章
- pytorch可视化 resnet50特征图
- VS.Net 2005 Beta2连接Team Foundation Server的问题
- Java 猜字谜游戏
- 前端小秘密系列之闭包
- unity去掉物体的阴影
- 麻瓜编程python web_python web麻瓜编程教程
- mbot编程机器人怎么连接蓝牙_STEAM教育机器人搭建指南,mBot入门级编程机器人搭建教程...
- mac系统vscode头文件not found
- 监听软键盘中的删除键
- 【研究生本科论文】论文语言常见的五个问题
- Scratch3.0创意编程(基础篇):第10课 接苹果
- 网络服务器充斥大量信息,使网络服务器中充斥着大量要求回复的信息,消耗带宽,导致网络或系统停止正常服务,这属于什么攻 - 普法考试题库问答...
- c语言五猴分桃案例分析,C语言程序设计五猴分桃问题实验报告.doc
- VIVO内置应用卸载指南(IQOO NEO5为例)
- linux中创建目录树,linux怎样创建目录树
- sqlserver+asp.net+devextreme从零开始(1)
- Android 10.0锁屏界面默认不显示Notification通知
- 你以为打上马赛克就安全了吗?用Python一键还原,了解一下?
- Windows + VS Code搭建 Go 开发环境
- Go Signal信号处理
热门文章
- python官网如何调中文-django的settings中设置中文支持的实现
- 风云编程python-首页
- python 调用linux命令-Python Linux系统管理之Python中执行外部命令
- python开发需要掌握哪些知识-Python的8个基础知识点,新手必须背下来!
- python pandas读取excel-python pandas 读取文件 写入文件excel
- 北京python培训班价格-北京Python启蒙班
- FTP,SFTP,FTPS三个文件传输协议的区别
- html5知识总结,HTML5初级知识总结
- 题目1191:矩阵最大值
- JAVA byte[] String