[Linux]C语言Linux系统编程创建进程
2018-06-18 03:55:59来源:未知 阅读 ()
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
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- C语言程序结构 2020-05-31
- Building & Debugging chromium on CLion for Linu 2020-05-19
- 每日干货丨C++语言主流开发工具推荐! 2020-04-28
- 学生信息管理系统.cpp(大二上) 2020-04-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash