我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux进程控制详解及实例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux进程控制详解及实例

Linux进程控制详解及实例

常用函数:

fork() 通过复制调用进程来建立新的进程,是最基本的进程建立操作。 exec 包括一系列的系统调用,其中每个系统调用都完成相同的功能,即通过用一个新的程序覆盖原内存空间,来实现进程的转变。各种exec系统调用之间的区别仅在于它们的参数构造不同。 wait() 它提供了初级的进程同步措施,能使一个进程等待,直到另一个进程结束为止。 exit() 常用来终止一个进程的运行。

进程的建立

  如果fork()调用成功,就会使内核建立一个新的进程,所建的新进程是调用fork()进程的副本。也就是说,新的进程运行与其创建者一样的程序,其中的变量具有与创建进程变量相同的值。

  系统调用fork()没有参数,它返回一个pid_t类型的值pid。pid被用来区分父进程和子进程。在父进程中pid被置为一个非0的正整数;在子进程中,pid被置为0。

进程的运行

  exec系列调用:


int execl(const char* path, const char *arg, ...);

  int execlp(const char * file, const char *arg, ...);

  int execle(const char *path, const char *arg, ..., char * const envp[]);

  int execv(const char* path, char *const argv[]);

  int execvp(const char* file, char * const argv[]);

  由于参数的个数是任意的,所以必须用一个null指针来标记参数表的结尾。下面给出一个使用execl()和execv()调用来运行ls的例子:   



#include <stdio.h>
#include <unistd.h>

main(){
  printf("Excuting lsn");
  execl("/bin/ls", "ls", "-l", NULL);
  
  perror("execl failed to run ls");
  exit(1);
}


#include <stdio.h>
#include <unistd.h>

main(){
  char *cmd[]={"ls", "-l", NULL};
  execv("/bin/ls", cmd);
  perror("execv failed");
  exit(1);
}

系统调用execlp()和execvp()分别类似于系统调用execl()和execv(),它们的主要区别是:execlp()和execvp()的第一个参数指向的是一个简单的文件名,而不是一个路径名。它们通过检索shell环境变量PATH指出的目录,来得到该文件名的路径前缀部分。

exec和fork()的联用

  通过联用可以实现父进程运行一个与其不同的子进程,并且父进程不会被覆盖。下面给出一个 exec和fork()联用的例子:  


#include <stdio.h>
#include <unistd.h>

main(){
  int pid;
  
  pid = fork();
  switch(pid){
    case -1:
      perror("fork failed.");
      exit(1);
    case 0:
      execl("/bin/ls", "ls", "-l", NULL);
      perror("execl failed.");
      exit(1);
    default:
      wait(NULL);
      printf("ls completed.n");
      exit(0);
  }
}

  在fork()调用之前,只有一个进程A,fork()调用后就有了进程A和B。A是父进程,它正在执行系统调用wait(),使进程A睡眠,直至进程B结束。同时进程B正在用execl装入命令ls。exec调用后,进程B的程序被ls的代码取代,执行ls命令的代码。

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux进程控制详解及实例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux进程控制详解及实例

Linux进程控制详解及实例 常用函数:fork() 通过复制调用进程来建立新的进程,是最基本的进程建立操作。exec 包括一系列的系统调用,其中每个系统调用都完成相同的功能,即通过用一个新的程序覆盖原内存空间,来实现进程的转变。各种e
2022-06-04

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

Linux fork()详解: 在开始之前,我们先来了解一些基本的概念:1. 程序, 没有在运行的可执行文件 进程, 运行中的程序 2. 进程调度的方法: 按时间片轮转 先来先服务 短时间优先 按优先级别 3. 进
2022-06-04

【Linux】Linux进程控制及程序替换

🍎作者:阿润菜菜 📖专栏:Linux系统编程 进程控制及程序替换 进程创建fork的用法进程调用fork,内核做了什么fork函数的返回值问题fork创建失败的原因 进程等待进程等待是什么
2023-08-24

Linux进程控制的示例分析

这篇文章将为大家详细讲解有关Linux进程控制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux进程控制详解及实例常用函数:fork() 通过复制调用进程来建立新的进程,是最基本的进程建立
2023-06-09

Android ToolBar控件详解及实例

ToolBar控件详解 在Activity中添加ToolBar1.添加库dependencies {...compile "com.android.support:appcompat-v7:18.0.+" }2.Activity要继承App
2022-06-06

Android Tab 控件详解及实例

Android Tab 控件详解及实例 在桌面应用中Tab控件使用得非常普遍,那么我们经常在Android中也见到以Tab进行布局的客户端。那么Android中的Tab是如何使用的呢? 1.Activitypackage com.wicre
2022-06-06

Linux shell流程控制实例分析

这篇文章主要介绍“Linux shell流程控制实例分析”,在日常操作中,相信很多人在Linux shell流程控制实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux shell流程控制实例分析
2023-06-27

java 进制转换实例详解

java 进制转换实例详解十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i
2023-05-31

Linux中多线程详解及简单实例

Linux中多线程详解及简单实例 1.概念 进程:运行中的程序。 线程:一个程序中的多个执行路径。更准确的定义是:线程是一个进程内部的一个控制序列。 2.为什么要有线程? 用fork调用进程代价太高,需要让一个进程同时做多件事情,线程就非常
2022-06-04

详解Linux监控重要进程的实现方法

不管后台服务程序写的多么健壮,还是可能会出现core dump等程序异常退出的情况,但是一般情况下需要在无 人为干预情况下,能够自动重新启动,保证服务进程能够服务用户。这时就需要一个监控程序来实现能够http://www.cppcns.co
2022-06-04

Android 控制ScrollView滚动的实例详解

Android 控制ScrollView滚动的实例详解在开发中,我们经常需要更新列表,并将列表拉倒最底部,比如发表微博,聊天界面等等,这里有两种办法,第一种,使用scrollTo():public static void scrollToB
2023-05-30

Flutter ScrollController滚动监听及控制示例详解

这篇文章主要为大家介绍了Flutter ScrollController滚动监听及控制示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

java逻辑控制语句实例详解

一、Java选择结构1、if(条件)…else结构当条件==true时执行if下的语句,否则执行else下的语句2、if(条件1)…else if(条件2)…else结构(相关视频教程推荐:java视频教程)当条件1==true时执行if(条件1)下的语句;当
java逻辑控制语句实例详解
2017-11-09

linux lsof命令详解及实例

linux lsof命令详解 简介 lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (
2022-06-04

Linux运维基础进程管理实时监控控制

目录1.后台运行作业2.使用信号控制进程基本进程管理信号3.监控进程活动IO负载4.实时进程监控top用于实现全屏动态显示系统信息1.后台运行作业1.sleep 999 & (运行作业) [root@localhost ~]# sleep
2022-06-04

Linux中Shell多进程并发以及并发数控制的示例分析

这篇文章主要介绍了Linux中Shell多进程并发以及并发数控制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 基础知识准备1.1. linux后台进程Unix
2023-06-10

Java 反射机制详解及实例

Java 反射机制详解及实例反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主
2023-05-31

编程热搜

目录