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的 ...
随机推荐
- poj 3254 Corn Fields
http://poj.org/problem?id=3254 Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissio ...
- IOS开发UISearchBar失去第一响应者身份后,取消按钮不执行点击事件的问题
在iOS开发中,使用UISearchBar的时候,当搜索框失去焦点的时候,取消按钮是默认不能点击的,如图按钮的颜色是灰色的: 这是因为此时取消按钮的enabled属性被设置为NO了,那么当我们需要让 ...
- nodejs require//////////z
背景 这篇文基本都是反对的,反对的很有道理,不是说我这篇文章的内容错误,因为这篇文章是我在健身房学习node的时候写的,这些知识都很粗糙,后来发现官方的稳定更详细:地址:http://nodejs.o ...
- oracle事物
要想解释oracle事物的工作流程,首先先解释几个小概念: 1.undo段的组成:段头.回滚块 2.事物ID:每一个事物都有一个自己的事物ID,就像身份证号一样. 在v$tra ...
- windows编程环境
自行下载VS2010官方原版并破解你也可以从微软官方直接下载VS2010 正式版,然后自行破解.Microsoft Visual Studio 2010官方下载地址如下:页面:http://www.m ...
- app加固
为什么要加固APP? 答:因为黑客通过反编译APK得到源码后,会在应用中插入代码,获取利益,比如添加广告,盗取用户账号.密码,后台定制活动等. 反编译的方法? 反编译是指apk文件通过反编译工具( ...
- 在XP上安装WinPython最新版本
2015年3月30日星期一 16:01:47 晴 WinPython 新版本不再支持Windows XP平台,会出现错误提示WindowsError 127. 按照官网论坛上的解决方案(htt ...
- 一场属于HTML5守望者的盛宴——记图灵参加HTML5峰会
2013年8月,北京正是一个火热的季节.一场火热的盛会,HTML5 峰会如约来袭.这是一场属于 HTML5 守望者的盛宴!HTML5作为一项新兴的技术,其未来是光明的,但是道路却是曲折的.需要标准的不 ...
- XML转换JSON的工具使用方法
1.xml的文件,文件的内容如下: <?xml version="1.0" encoding="UTF-8" standalone="yes&q ...
- MSDTC故障排除,DTCTester用法 (二)
摘自:https://support.microsoft.com/zh-cn/kb/293799#bookmark-4 ———————————————————————————— 概要 DTCTeste ...