码迷,mamicode.com
首页 > 系统相关 > 详细

linux应用程序开发-进程程序设计

时间:2014-12-14 11:57:48      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:io   ar   sp   for   on   数据   bs   amp   as   

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

进程,线程,进程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应用程序开发-进程程序设计

标签:io   ar   sp   for   on   数据   bs   amp   as   

原文地址:http://www.cnblogs.com/summer-xwq/p/4162314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!