1.fork函数

\qquad执行一个可执行的程序,就创建一个进程。除此之外,还可以使用fork()函数创建一个子进程。
\qquadfork函数的返回值有两个,本质是一个进程变成两个进程,这两个进程各自对fork做返回:返回子进程pid(父进程非负整数);返回0(子进程创建成功)。

#include<stdio.h>
#include <unistd.h>int main()
{pid_t pid;printf("----------------------\n");pid = fork();if(pid==-1){printf("error\n");}else if(pid==0){printf("I am child,pid = %u, ppid = %lu\n",getpid(),getppid());// getpid()返回调用进程的进程ID;getppid()返回调用父级的进程ID}else{printf("I am parent,pid = %u, ppid = %lu\n",getpid(),getppid());sleep(1);}printf("-----------------------\n");return 0;
}

\qquad运行结果:

----------------------
I am parent,pid = 17257, ppid = 17200
I am child,pid = 17258, ppid = 17257
-----------------------
-----------------------

\qquad在程序执行到pid=fork()时,程序会创建一个子进程,
\qquad此时父进程的pid>0;执行

 printf("I am parent,pid = %u, ppid = %lu\n",getpid(),getppid());sleep(1);

\qquad然后继续向下执行

printf("-----------------------\n");

\qquad此时子进程pid=0;执行

printf("I am child,pid = %u, ppid = %lu\n",getpid(),getppid());

\qquad然后继续向下执行

printf("-----------------------\n");

2.循环创建子进程

#include<stdio.h>
#include<unistd.h>
int main()
{pid_t pid;int i;for(i=0;i<5;i++){pid = fork();if(pid==-1){printf("错误\n");}else if(pid==0){break;}}if(i<5){sleep(i);printf("i am %dth child,pid=%u\n",i+1,getpid());}else{sleep(i);printf("i am parent,pid=%u\n",getpid());}return 0;
}

3.getuid()和getgid()函数

\qquad获取当前进程的实际用户ID:uid_t getuid(void)
\qquad获取当前进程的有效用户ID:uid_t geteuid(void)
\qquad获取当前进程的使用用户组ID:gid_t getgid(void)
\qquad获取当前进程的有效用户组ID:gid_t getegid(void)

4.父子进程在fork()之后的异同

\qquad在fork之后:
\qquad相同点:全局变量;.data;.text;栈;堆;环境变量;用户ID;进程工作目录…
\qquad不同点:进程ID;fork返回值;父进程ID;进程运行时间;闹钟/定时器;未决信号集
\qquad父子遵循读时共享写时复制的原则。父子进程共享:文件描述符(打开文件的结构体);mmap建立的映射区。而父子进程执行的先后顺序,取决于内核的调度算法。

linux基础知识——创建进程相关推荐

  1. linux基础知识_压缩—进程管理-网络管理-ftp-nfs-ssh-scp

    linux基础知识_压缩-进程管理-网络管理-ftp-nfs-ssh-scp 1.压缩包管理 gzip .gz格式的压缩包,不打包,分别压缩,原文件消失 bzip2 .bz2格式的压缩包,原文件不会消 ...

  2. Linux基础知识题解答(一)

    题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. 计 ...

  3. linux基础知识复习

    @(tigerfive)[linux,基础知识,复习笔记] linux基础复习(一) 今天只整理框架,具体内容之后详细整理吧 文件管理 文件基本操作 创建文件和目录 拷贝文件和目录 剪切文件和目录 删 ...

  4. 大数据成长之路:谈谈那些必须学习的Linux基础知识

    作者| Roy瑞士 责编| Carol 封图| CSDN│下载于视觉中国 这里主要介绍学习大数据过程中用到的Linux基础知识,现在主攻的方向是大数据开发,欢迎大家共同交流. 环境 推荐安装VMwar ...

  5. 【Java从0到架构师】Linux 基础知识、常用命令

    Linux 基础知识.常用命令 Linux 基础知识 内核和发行版 常见的 Linux 发行版 Linux 的应用领域 Linux 与 Windows 的区别 Linux 常用命令 *系统目录结构 s ...

  6. Linux基础知识题解答(四)

    题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. 1 ...

  7. LINUX基础知识笔记全

    LINUX基础知识整理 1.Linux 基本知识 2.Linux 文件和目录管理 vim scp sftp 压缩和归档 文件访问权限 脚本 3.Linux 用户和群组管理 sudo ssh opens ...

  8. linux基础知识ppt下载,《Linux基础知识》PPT课件.ppt

    <<Linux基础知识>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<Linux基础知识>PPT课件.ppt(26页珍藏版)>请在装配图网上搜 ...

  9. 后端程序员必备的 Linux 基础知识

    后端程序员必备的 Linux 基础知识 原文来自github stars>63k的项目JavaGuide,欢迎小伙伴去支持原作者 一 从认识操作系统开始 1.1 操作系统简介 1.2 操作系统简 ...

最新文章

  1. pyqt 照片打上水印
  2. Java中对象的储存区
  3. 【双系统下给ubuntu18.04扩容】
  4. STL源码学习----集合相关算法
  5. IOS - IPhone或IPAD,如何恢复出厂操作系统?
  6. excel不能编辑如何解锁_偷梁换柱之EXCEL编辑保护和VBA隐藏代码保护的解锁
  7. AF_INET域与AF_UNIX域socket通信原理对比
  8. HBase的BulkLoad详解
  9. layUI提交多个相同name的值
  10. MySQL的select语法
  11. 小凡的Python之路——安装
  12. 六子棋计算机博弈关键技术研究,六子棋计算机博弈系统的研究与实现-计算机应用技术专业论文.docx...
  13. 读书寄语:有一种感动叫守口如瓶
  14. 桌面html文件图标异常,.htm.html文件图标无法显示的解决办法
  15. 星辉信息科技教程-Centos上silk微信语音转换成mp3格式
  16. 遗传算法(Genetic Algorithm,GA)
  17. 《王道计算机组成原理》学习笔记和总目录导航
  18. 23王道数据结构代码题全解(二)
  19. 尝鲜用 React Hook + Parcel 构建真心话大冒险简单页面
  20. Android动画之Tween Animation

热门文章

  1. LeetCode 246. 中心对称数(哈希)
  2. POJ1003/1004/1005/1207/3299/2159/1083/3094/2388解题(刷一波水题)
  3. 强基计划对计算机,你对报考强基计划怎么看?
  4. python能做机器人吗_python深度学习 人工智能是做机器人吗?
  5. 5000并发的qps是多少_高并发架构设计
  6. Jquery基础知识
  7. java x.length_Java中的length和length()
  8. java组装树状结构数据集合_JAVA构建List集合为树形结构
  9. 90TB显存!英伟达发布新一代SuperPod超算,AI算力新巅峰!
  10. 论文浅尝 - SIAM ICDM 2020 | 基于图时空网络的知识引导的诊断预测