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)

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

  

时间: 2024-11-08 05:18:38

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

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

IPC why: 1.数据传输 2.资源共享 目的: 3.通知事件 4.进程控制 发展: 1.UNIX进程间通信 2.基于SYStem V 3.POSIX 方式分类: 1.pipe(管道) FIFO(有名管道) 2.signal 3.消息队列 4.共享内存 5.信号量 6.套接字(socket) 管道通信:单向,先进先出 创建 pipe:父子之间通讯 FIFO:任意 创建: int pipe(int filedis[2]); 管道创建时,产生两个文件描述符:filedis[0]读管道,filed

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

嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目录---chdir(): 4.重新设置文件权限掩码---umask(): 5.关闭所有的文件描述符---close(fdx): 6.设置daemon程序的任务---此例主要在while循环中体现. 下面是一个例子程序: /* daemon * how to create a daemon proce

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

在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为linux应用程序开发的一个系列吧! 文件编程有两种方式,一是系统调用方式,二是库函数调用. 前者依赖特定的平台,后者不依赖平台. 系统调用:创建 int creat(const char *filename,mode_t mode); filename:要创建的文件名 mode:创建模式 S_IR

Linux从程序到进程

Linux从程序到进程 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 计算机如何执行进程呢?这是计算机运行的核心问题.即使已经编写好程序,但程序是死的.只有活的进程才能产出.我们已经从Linux进程基础中了解了进程.现在我们看一下从程序到进程的漫漫征程. 一段程序 下面是一个简单的C程序,假设该程序已经编译好,生成可执行文件vamei.exe. #include <stdio.h> int glob=0; /*global

[转载][献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南

[献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南. 前言,Linux/Unix 社区的版块不热闹,新手太多,高手太忙,偶把自己这几年的Linux学习的过程讲讲,希望能给大家有点帮助, 引导初学者学习的方向,少走弯路,事半功倍,同时也是抛砖引玉,请过来人热烈发言. 1. 首先熟悉 Linux  建议在 Windows 上安装 VMware Workstation 6.5.0(以下简称VM), 下载种子在 http://www.verycd.com上找. 安装好 

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

程序.进程和线程的区别 程序是一组指令及参数的集合,指令按照既定的逻辑控制计算机运行.进程则是运行着的程序,是操作系统执行的基本单位.线程则是为了节省资源而可以在同一个进程中共享资源的一个执行单位. ? 程序和进程的区别: ????C.C++.Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行.应用程序的运行状态称为进程.进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的资源管理实体.可以从

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

1.1     代码提示功能 在vs中开发中,Visual Assist是一个很优秀的插件,我们仍然能够使用它进行代码的分析,但它仅仅能支持vcxprojproject,因而我们选择对vcxproj的project进行扩展,这样VisualAssist就能够正常使用了. 此外,VS的智能感知不支持GCC的一些扩展,在做代码分析的时候可能出错.我们採用强制包括头文件的方式解决一部分问题: 注意,这个文件的目的是让VS可以进行代码的分析,而不是让VS具有编译这些代码的能力!! ! 这个头文件类似于这

Linux查看程序、进程的依赖库的方法

作者:zhanhailiang 日期:2015-02-01 原文:How to check what libraries are used by a program or process on Linux 1. 利用ldd查看可执行程序的依赖库 [[email protected]~]# ldd /usr/local/php/bin/php linux-vdso.so.1 => (0x00007fff753f5000) libcrypt.so.1 => /lib64/libcrypt.so.1

查看Linux上程序或进程用到的库

ldd /path/to/program 要找出某个特定可执行依赖的库,可以使用ldd命令.这个命令调用动态链接器去找到程序的库文件依赖关系. objdump -p /path/to/program | grep NEEDED 注意!并不推荐为任何不可信的第三方可执行程序运行ldd,因为某些版本的ldd可能会直接调用可执行程序来明确其库文件依赖关系,这样可能不安全.取而代之的是用一个更安全的方式来显示一个未知应用程序二进制文件的库文件依赖. pldd 1100 如果你想要找出被一个运行中的进程载