学习之前必须了解基本的概念:

进程,线程,进程3种状态,进程调度以及4种算法,进程同步,死锁,记不清的找度娘。

获取ID

#include<sys/types.h>

#include<unistd.h>

获取本进程ID:

pid_t getpid(void)

获取父进程ID:

pid_t getppid(void)

举例:

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

int main(void)

{

  printf("PID=%d\n",getpid());

  printf("PID=%d\n",getppid());

return 0;

}

进程创建:

#include<unistd.h>

pid_t fork(void)

创建子进程;被调用一次,返回两次,可能3种取值;

1.父进程中,返回子进程PID;

2.子进程中,返回0;

3.错误返回一个负值;

子进程的数据空间,堆栈空间都会从父进程一个copy,而不是共享。

-vfork

pid_t vfork(void)

区别:vfork子进程与父进程共享数据段。

    vfork子进程先执行,父进程后执行。

    fork次序不确定;

exec函数族:

被执行的程序替换调用它的程序:

区别:

  fork创建一个新进程,产生一个新PID;

  exec启动一个新程序,替换原有进程,PID不变。

#include<unistd.h>

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

path:被执行的程序名

argn:命令行参数,含参数名,以空指针(NULL)结束

举例:

#include<unistd.h>

  main()

  {

    execl("/bin/ls","ls","-al","/etc/passwd",(char*)0);

  }

#include<unistd.h>

int execp(const char*path,const char*arg1,...);

path:被执行的程序名(不含路径,从path环境变量中查找)。

exmple:

execp("ls","ls","-al","/etc/passwd",(char*)0);

#include<unistd.h>

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

example:

#include<unistd.h>

main
{

char *argvl[]={"ls","-al","/etc/passwd",(char*)0};

execv("/bin/ls",argv);

}

#include<stdlib.h>

int system(const char*sring);

调用fork产生子进程,由子进程调用/bin/sh -c string来执行参数string所代表的命令。

e:

system("ls -al /etc/passwd");

进程等待:

#include<sys/types.h>

#include<sys/wait.h>

  pid_t wait(int*status)

阻塞该进程,直到某个进程退出。

  

linux应用程序开发-进程程序设计的更多相关文章

  1. linux应用程序开发-进程通信(IPC)

    IPC why: 1.数据传输 2.资源共享 目的: 3.通知事件 4.进程控制 发展: 1.UNIX进程间通信 2.基于SYStem V 3.POSIX 方式分类: 1.pipe(管道) FIFO( ...

  2. 嵌入式Linux应用程序开发详解------(创建守护进程)

    嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目 ...

  3. linux应用程序开发-文件编程-系统调用方式

    在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为 ...

  4. 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程

    前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...

  5. Linux入门-程序开发

    Linux程序开发 linux程序总体上来说是分两部分的: 1. 底层驱动程序开发: 2.应用层应用程序开发: 驱动程序 一般情况下驱动是跟内核与硬件有关系的,编程语言是C语言,需要懂一些硬件的知识, ...

  6. Linux从程序到进程

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在高级语言中,这些内存管理的细节对于用户来说不透明.在编程的时候,我们只需要记住上 ...

  7. 【Linux】程序、进程和线程的区别

    程序.进程和线程的区别 程序是一组指令及参数的集合,指令按照既定的逻辑控制计算机运行.进程则是运行着的程序,是操作系统执行的基本单位.线程则是为了节省资源而可以在同一个进程中共享资源的一个执行单位. ...

  8. 《嵌入式linux应用程序开发标准教程》笔记——7.进程控制开发

    进程是系统资源的最小单元,很重要. 7.1 linux进程的基本概念 定义:一个程序的一次执行过程,同时也是资源分配的最小单元.程序是静态的,而进程是动态的. 进程控制块:linux系统用进程控制块描 ...

  9. Vs2012于Linux应用程序开发(2):图案

    1.1     代码提示功能 在vs中开发中,Visual Assist是一个很优秀的插件,我们仍然能够使用它进行代码的分析,但它仅仅能支持vcxprojproject,因而我们选择对vcxproj的 ...

随机推荐

  1. UVALive 7139 Rotation(矩阵前缀和)(2014 Asia Shanghai Regional Contest)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...

  2. Qt 工程 pro文件

    工作中,感觉pro文件的有些内容真不太懂,现系统性的学习一下.于此备录,分享共勉. 为了更好的理解,先创建一个简单的工程作为实践. [1]创建一个pro文件 1.1 新建proDemo工程.步骤如下: ...

  3. PhpStorm提高效率的使用方法及设置

    快捷键: CTRL + D  复制当前行到下一行 或 复制选中内容到选中内容之后 CTRL + Y  删除当前行或选中内容所涉及的行 CTRL + R  替换 CTRL + F  查找 ALT + 上 ...

  4. python 编辑文件时路径问题解决方法:文件或者目录不存在、文件编辑后无法保存等(以编辑xml文件为例)

    1.获取工程所在根路径:根路径=os.path.dirname(os.path.abspath('__file__')) 2.将获取的根路径和相对路径组合:组合路径=os.path.join(根路径, ...

  5. 使用httpclient发送http请求

    先来个httpclient的maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> &l ...

  6. CSS3 笔记二(Gradients)

    CSS3 Gradients Two types of gradients: Linear Gradients (goes down/up/left/right/diagonally) Radial ...

  7. 集群间Session共享问题解决方案

    两个基本概念的生命周期 session: 当新客户端发现一个HTTP请求时服务端会创建一个session.并分配一个sessionID作为服务端来客户端的识别,session对象会保存在服务端.此时s ...

  8. Linux:-防火墙iptables如何个性化定制?

    身份标签/usr/local/etc/identity,主脚本iptables.sh,附属目录functions/iptables.d ├── iptables.sh ├── functions│   ...

  9. HTML5的Video标签的属性,方法和事件汇总

    <video>标签的属性 src :视频的属性 poster:视频封面,没有播放时显示的图片 preload:预加载 autoplay:自动播放 loop:循环播放 controls:浏览 ...

  10. amgular $q用法

    amgular $q用法   在用JQuery的时候就知道 promise 是 Js异步编程模式的一种模式,但是不是很明白他跟JQuery的deferred对象有什么区别.随着公司项目的进行,要跟后台 ...