linux应用程序开发-进程程序设计
学习之前必须了解基本的概念:
进程,线程,进程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应用程序开发-进程程序设计的更多相关文章
- linux应用程序开发-进程通信(IPC)
IPC why: 1.数据传输 2.资源共享 目的: 3.通知事件 4.进程控制 发展: 1.UNIX进程间通信 2.基于SYStem V 3.POSIX 方式分类: 1.pipe(管道) FIFO( ...
- 嵌入式Linux应用程序开发详解------(创建守护进程)
嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目 ...
- linux应用程序开发-文件编程-系统调用方式
在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为 ...
- 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程
前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...
- Linux入门-程序开发
Linux程序开发 linux程序总体上来说是分两部分的: 1. 底层驱动程序开发: 2.应用层应用程序开发: 驱动程序 一般情况下驱动是跟内核与硬件有关系的,编程语言是C语言,需要懂一些硬件的知识, ...
- Linux从程序到进程
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在高级语言中,这些内存管理的细节对于用户来说不透明.在编程的时候,我们只需要记住上 ...
- 【Linux】程序、进程和线程的区别
程序.进程和线程的区别 程序是一组指令及参数的集合,指令按照既定的逻辑控制计算机运行.进程则是运行着的程序,是操作系统执行的基本单位.线程则是为了节省资源而可以在同一个进程中共享资源的一个执行单位. ...
- 《嵌入式linux应用程序开发标准教程》笔记——7.进程控制开发
进程是系统资源的最小单元,很重要. 7.1 linux进程的基本概念 定义:一个程序的一次执行过程,同时也是资源分配的最小单元.程序是静态的,而进程是动态的. 进程控制块:linux系统用进程控制块描 ...
- Vs2012于Linux应用程序开发(2):图案
1.1 代码提示功能 在vs中开发中,Visual Assist是一个很优秀的插件,我们仍然能够使用它进行代码的分析,但它仅仅能支持vcxprojproject,因而我们选择对vcxproj的 ...
随机推荐
- JSON--JavaScript Object Notation
概念 一种轻量级的数据交换格式,本质是特定格式的字符串,是客户端和服务器端交互数据的常用选择 规则 []集合 [value1,value2] {}对象 {key1:value1,key2,value2 ...
- web前端基础知识 - Django进阶
1. 路由系统 1.1 单一路由对应 url(r'^index$', views.index), 1.2 基于正则的路由 url(r'^index/(\d*)', views.index), url( ...
- Buge's Fibonacci Number Problem
Buge's Fibonacci Number Problem Description snowingsea is having Buge’s discrete mathematics lesson, ...
- Android Native 代码NDK开发学习笔记
引用:http://www.kunli.info/2011/08/21/android-native-code-study-note/ JNI,全称Java Native Interface,是用于让 ...
- simvision使用
Access Design Source Code: 1)通过file---open来打开, 2)通过send to source viewer来看, 双击信号,进行driver的trace,显示在左 ...
- 当display=none时,元素和子元素高度为0的解决办法
在前端中为了某种需要,我们需要获取display=none的元素或者子元素的实际高度来进行某些处理,然而html对display=none的元素和子元素是不进行渲染的,如果我们没有规定这些元素的高度那 ...
- newtonsoft.json 序列化,反序列化
public class Book { public string BookID { get; set; } public DateTime PublishDate { get; set; } pub ...
- poj 2515 差分序列,排列组合
大神博客链接 http://blog.csdn.net/kksleric/article/details/8021276 这道题的差分序列从没看过,公式题. 先构造从0到m的第p阶差分序列,算出0^p ...
- DELPHI XE5 与SQLITE
最近一次使用DELPHI做项目是使用DELPHI2009,为了访问本地数据库方便,使用ACCESS数据库,不需要安装驱动,(WINDOWS自带),但是ACCESS数据库的性能确实很糟糕,通过ADO连接 ...
- Oracle提示大全
Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比. 此时就需要DBA进行 ...