震惊!!!它来了!linux进程控制函数终于来了!

进程控制

getpid获取进程pid号

getpid()----获取一个进程的pid号

原型:pid_t getpid(void);    //补充: pid_t 这个类型是int

返回值:成功:当前进程的ID号  失败:负数

获取当前进程的ID

进程控制相关的头文件:

#include <sys/types.h>

#include <unistd.h>

#include <stdlib.h>

#include <sys/wait.h>

pid=getpid();

getppid获取当前进程的父进程ID号

getppid() ---获得当前进程父进程的ID号

原型:pid_t getppid(void)

返回值:成功 返回当前父进程的ID号

//返回当前父进程的ID号

ppid=getppid();

system打开另外一个进程

函数:system()  

功能:在一个运行进程中打开另外一个进程,运行完成之后回到原来进程继续执行

函数:运行进程

原型:int system(const char *string)

参数:const char *string ---->表示待执行的命令  比如“ls -l”

功能:函数system()会调用fork()函数产生子进程,由于进程调用string 字符串命令,执行命令完成后可以重新返回。--->可执行程序,例如:"./a.out"

int a;

a = system("./a.out")

printf("%d\r\n",a);

//调用一下system函数,打开pwd进程,再打开ls进程

a=system("pwd");

printf("a = %d\r\n",a);

b=system("ls -l");

printf("b = %d\r\n",b);

execl替换进程

函数:替换进程exec()函数---相当于一个函数族,函数名中出现了l、v、e、p结尾

原型:int execl(const char *path,char *arg....)

参数:const char *path   ---->表示执行程序的路径

      char *arg   ---->表示传进来一个参数--命令,还需要加上NULL

返回值:成功的,不会返回,也就说,execl()之后的代码不会执行。

        失败,返回-1

功能:用参数指定的进程替换当前的进程

功能:用新进程替换当前进程的程序---注意:进程的ID不变,变化的只有执行代码发生变化

//调用一个execl函数--替换进程函数

execl("./test","./test",NULL);

fork创建子进程

创建进程函数:pid_t fork(void); 

目的:创建子进程。

返回值:父进程中,用fork返回新创建子进程的进程ID

        在子进程中fork函数返回值为0

失败的话返回  负值

//调用fork函数

ret = fork();//子进程

if(ret < 0)

{

printf("for error\r\n");

return -1;

}

else if(ret == 0)

{

//子进程代码实现

printf("world is ok\r\n");

}

else if(ret > 0)

{

//父进程代码实现

   printf("parents if ok\r\n");

}

sleep休眠函数

sleep()

原型:unsigned int sleep(unsigned int seconds);

参数:unsigned int seconds --> 代表休眠的秒数s

功能:让调用该函数的进程等待多少秒

usleep()

原型:int usleep(useconds_t usec);

参数:usenconds_t usec  ---->表示休眠的微秒数  

功能:让调用该函数的进程等待多少微秒

sleep(1);

vfork创建子进程

原型:pid_t vfork(void)

返回值:和fork()函数一样,成功,子进程返回0

功能:创建一个子进程,并阻塞父进程的运行直到子进程运行结束

pid_t ret;

ret = vfork();

if(ret < 0)

{

printf("creat child process failed\r\n");

return -1;

}

if(ret == 0)

{

//子进程

printf("Child\r\n");

sleep(1);//阻塞也不会进入父进程

printf("child2\r\n");

}

else

{

//父进程

printf("parent\r\n");

}

exit退出进程

退出函数:exit()

原型:void exit(int status)  

参数:int status  --->用于返回数据给父进程,一般填写为0

功能:exit()函数正常结束进程,并把参数返回给父进程,会将进程缓冲区的内容全部写回并关闭文件

原型:void _exit(int status)

参数:int status  --->用于返回数据给父进程,一般填写为0

功能:_exit()正常终止目前正在执行的进程,但是不会将缓存区的内容写回。

exit(0);

wait等待子进程结束

头文件

#include <sys/types.h>

#include <sys/wait.h>

原型:pid_t wait(int *status)

参数:int *status ---> 用于接收子进程退出时候返回给父进程数据

返回值:子进程的PID

功能:wait()会暂时停止目前执行的进程,直到接收到子进程结束的信号exit

如果调用wait()函数,子进程已经结束,返回给父进程子进程结束的状态信息。如果说不知道子进程结束的状态,设置为NULL

//调用一下对应的wait函数

ret=wait(NULL);

waitpid等待特定子进程结束

原型:pid_t waitpid(pid_t pid,int *status,int options);

参数:pid_t pid --->指定等待的进程的PID号

        如果pid = -1 等待任何子进程结束  相当于wait()

   如果pid > 0  对应等待相应子进程结束

        如果 pid < -1 的时候,去绝对值 例如: -10  起始就是等待 10号进程

  int  options  表示选项参数,一般设置为0

功能:和wait函数基本一致,但是可以等待指定的进程

waitpid(pid,int *statue,0)

小广告:

1.好好学习,天天向上

2.出售赚钱秘籍,仅售100份,先到先得。如果想要购买请先关注博主,然后私信购买。

3.下期预售商品关键字:如何找女朋友?不接受预购,可以先关注博主,等待商品出售。

  • 15
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值