Linux 编程之进程fork()详解及实例

 更新时间:2017年03月27日 11:46:49   投稿:lqh  
这篇文章主要介绍了Linux 编程之进程fork()详解及实例的相关资料,需要的朋友可以参考下

Linux fork()详解:

在开始之前,我们先来了解一些基本的概念:

1. 程序, 没有在运行的可执行文件  

   进程,  运行中的程序   

2. 进程调度的方法:  

    按时间片轮转  
    先来先服务 
    短时间优先 
    按优先级别   

3. 进程的状态:       

        就绪   ->>   运行  ->> 等待 
        运行 ->> 就绪 //时间片完了 
        等待 ->> 就绪 //等待的条件完成了   

查看当前系统进程的状态 ps auxf 

status: 

D    Uninterruptible sleep (usually IO) 
R    Running or runnable (on run queue) 
S    Interruptible sleep (waiting for an event to complete) 
T    Stopped, either by a job control signal or because it is being traced. 
W    paging (not valid since the 2.6.xx kernel) 
X    dead (should never be seen) 
Z    Defunct ("zombie") process, terminated but not reaped by its parent. 
<    high-priority (not nice to other users) 
N    low-priority (nice to other users) 
L    has pages locked into memory (for real-time and custom IO) 
s    is a session leader 
l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do) 
+    is in the foreground process group   

4. 父进程/子进程 , 让一个程序运行起来的进程就叫父进程, 被调用的进程叫子进程   

5. getpid //获取当前进程的进程号 
   getppid //获取当前进程的父进程号   

6. fork //创建一个子进程,创建出来的子进程是父进程的一个副本, 除了进程号,父进程号不同。  

    子进程从fork()后开始运行, 它得到的fork返回值为0 
    父进程得到的返回值为子进程的进程号 
    返回值为-1时, 创建失败

来看一个程序:

#include <stdio.h> 
#include <unistd.h> 
 
int main(void) 
{ 
  pid_t pid ;  
  //printf("hello world \n"); 
 
  //从fork开始就已经产生子进程 
  pid = fork();  //就已经产生新的4G空间,复制空间 
  //创建出来的子进程是父进程的一个副本,除了进程号,父进程号和子进程号不同 
  //printf("hello kitty\n"); 
  if(pid == 0)   
  { 
    //子进程运行区 
 
    printf("child curpid:%d parentpid:%d \n" , getpid() , getppid()); 
    return 0 ;  
  } 
 
  //父进程运行区 
  printf("parent curpid:%d parentpid:%d \n" , getpid() , getppid()); 
 
  return 0 ;  
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Linux Shell 数组建立及使用技巧

    Linux Shell 数组建立及使用技巧

    shell命令在linux系统中是一个非常重要的功能了,我们可以通过它来做N多的事情,本文给大家介绍linux shell 数组建立及使用技巧,需要的朋友可以参考下
    2015-10-10
  • Shell脚本查看网卡实时流量

    Shell脚本查看网卡实时流量

    这篇文章主要介绍了Shell脚本查看网卡实时流量,本文直接给出实现代码,需要的朋友可以参考下
    2014-12-12
  • linux crontab 实现每秒执行的实例

    linux crontab 实现每秒执行的实例

    下面小编就为大家带来一篇linux crontab 实现每秒执行的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Shell中实现“多线程”执行脚本文件完美解决方案

    Shell中实现“多线程”执行脚本文件完美解决方案

    这篇文章主要介绍了Shell中实现“多线程”执行脚本文件完美解决方案,本文是针对一次调用执行多个脚本文件并分批执行的一个解决方法的测试和总结,需要的朋友可以参考下
    2014-12-12
  • linux命令返回值的含义解析

    linux命令返回值的含义解析

    这篇文章主要介绍了linux命令返回值的含义,linux命令执行后无论成功与否都有一个返回值,如果为 0,则表示命令执行成功,其它值则表示错误,具体代码及含义介绍大家通过本文学习下吧
    2018-06-06
  • Linux下shell通用脚本启动jar(微服务)

    Linux下shell通用脚本启动jar(微服务)

    这篇文章主要介绍了Linux下shell通用脚本启动jar(微服务)的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • shell 字符串操作(切片 长度 替换)

    shell 字符串操作(切片 长度 替换)

    这篇文章主要为大家介绍了shell 字符串操作(切片 长度 替换)脚本解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 执行Shell脚本的4种方法及区别介绍

    执行Shell脚本的4种方法及区别介绍

    这篇文章主要介绍了执行Shell脚本的4种方法及区别介绍,本文讲解了相对路径方式、绝对路径方式、bash命令调用、相对或绝对方式以及说下几种方式的区别,需要的朋友可以参考下
    2015-05-05
  • PXE kickstart自动化部署系统安装

    PXE kickstart自动化部署系统安装

    这篇文章主要为大家介绍了PXE kickstart自动化部署系统的过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • GitBook 制作电子书详细教程

    GitBook 制作电子书详细教程

    本文主要介绍GitBook如何制作电子书,在使用过程中经常出现的问题以及解决办法,希望能帮助到有需要的同学
    2016-07-07

最新评论