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 ;  
} 

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

相关文章

  • 使用shell脚本采集系统cpu、内存、磁盘、网络等信息

    使用shell脚本采集系统cpu、内存、磁盘、网络等信息

    这篇文章主要介绍了使用shell脚本采集系统cpu、内存、磁盘、网络等信息,需要的朋友可以参考下
    2014-05-05
  • Shell脚本实现MySQL、Oracle、PostgreSQL数据库备份

    Shell脚本实现MySQL、Oracle、PostgreSQL数据库备份

    本文主要介绍了Shell脚本实现MySQL、Oracle、PostgreSQL数据库备份,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • shell通过遍历输出两个日期范围内所有日期的方法

    shell通过遍历输出两个日期范围内所有日期的方法

    这篇文章主要介绍了在shell通过遍历输出两个日期范围内所有日期的方法,文中给出了详细的示例代码以及实现思路流程,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • Linux下自动删除过期备份和自动异地备份的脚本

    Linux下自动删除过期备份和自动异地备份的脚本

    这篇文章主要介绍了Linux下自动删除过期备份和自动异地备份,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • shell脚本实现监控某个进程意外停止后拉起进程

    shell脚本实现监控某个进程意外停止后拉起进程

    今天小编就为大家分享一篇关于shell脚本实现监控某个进程意外停止后拉起进程,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • linux 守护进程详解及建立守护进程

    linux 守护进程详解及建立守护进程

    这篇文章主要介绍了linux 守护进程详解及建立守护进程的相关资料,需要的朋友可以参考下
    2017-04-04
  • shell中if-then的高级使用

    shell中if-then的高级使用

    在Shell脚本编程中,if-then语句是基本的逻辑控制结构,用于根据条件执行代码,本文介绍了if-then的基本语法、条件表达式、使用单双括号的区别及高级特性,感兴趣的可以了解一下
    2024-11-11
  • 在Linux中自动化脚本执行重复性任务的详细步骤

    在Linux中自动化脚本执行重复性任务的详细步骤

    选择适合你需求的脚本语言,对于大多数自动化任务,Bash脚本是一个不错的选择,因为它易于编写和理解,对于更复杂的任务,你可能需要使用Python或其他编程语言,下面给大家分享在Linux中编写自动化脚本执行重复性任务通常涉及的步骤,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • 在Linux上列出磁盘信息的七个命令详解

    在Linux上列出磁盘信息的七个命令详解

    在 Linux 系统上,了解系统中的磁盘信息对于系统管理员和用户来说都是至关重要的,通过了解系统上的磁盘情况,可以有效管理存储空间、诊断问题并进行性能优化,本文给大家介绍了在Linux上列出磁盘信息的七个命令,需要的朋友可以参考下
    2024-05-05
  • Shell Script条件判断详解

    Shell Script条件判断详解

    ShellScript中,命令执行后的返回状态可以用于条件判断,其中0表示成功,1-255表示失败,重定向操作允许控制命令输出,包括覆盖和追加方式,逻辑操作符&&和||用于根据命令状态执行逻辑判断,IF语句则是基于命令的执行结果来分支执行不同的代码块,支持if、elif和else关键字
    2024-09-09

最新评论