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)

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

  

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。