Linux进程

相关函数:

1.pid_t  getpid(void)

功能:获取当前进程的ID;


2.pid_t  getppid(void)

功能:获取当前进程的父进程的ID;


3.pid_t  fork(void)

返回值:

-1     创建进程失败;并且记录到errno;

0       子进程的返回值

子进程的ID     父进程得到子进程作为返回值;

说明:fork是完全copy了一份父进程的地址空间给子进程,让彼此可以独立的执行。

父子进程执行的先后顺序不定,子进程有自己的pid;

举例:

#include<stdio.h>
#include<unistd.h>

int main()
{
    fork();
    fork();
    fork();
    printf("process is %d\n",getpid());
    return 0;
}
执行结果:
[root@localhost ~]# ./forkcount
process is 3470
[root@localhost ~]# process is 3473
process is 3472
process is 3471
process is 3474
process is 3476
process is 3475
process is 3477
以上执行了打印了2^3次;



4.pid_t  vfork(void)

返回值:

-1           失败,并且记录到errno;

子进程返回值是0;

子进程ID  父进程中得到子进程ID作为返回值;

说明:vfork是与父进程共享地址空间,并且父进程会等待子进程执行完毕后才继续执行,

子进程有自己的pid;


5.执行文件exec族

(1) int execl(const char *path, const char *arg, ...);//l的意思是list

举例:execl("/bin/ps","ps",“-ef”,NULL);//该语句相当于shell命令:“ps   -ef”;

(2)int execlp(const char *file, const char *arg, ...);//文件名可以不用全路径;

举例:execl("ps","ps",“-ef”,NULL);//该语句相当于shell命令:“ps   -ef”;

(3)int execv(const char *path, char *const argv[]);//v是数组的意思;

举例:char*arg【】={“ps”,“-ef”,NULL};//注意:最后参数以NULL结尾;

           execv(“/bin/ps”,arg);//就可以执行同以上效果了;


6.进程的销毁

void  exit(int  status);

void  _exit(int  status);//第二个函数需要包含头文件:unistd.h

不同:exit会清空缓存;_exit不会清空缓存;

举例:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    printf("hello world");
    exit(0);
}
执行结果:[root@localhost ~]# ./exit
                    hello world[root@localhost ~]#

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main()
{
    printf("hello world");
    _exit(0);
}
执行结果:(没有打印出hello  world)
[root@localhost ~]# ./_exit

[root@localhost ~]#


7.进程等待

(1) pid_t  wait(int *status);

功能:让主进程等待子进程执行完后,主进程才开始执行;

参数:status是子进程退出时返回的状态;如果不需要知道子进程返回什么值,可以用NULL代替;

(2) pid_t waitpid(pid_t pid, int *status, int options);

参数:pid是指定主进程要等待的子进程ID;

            status是该子进程的返回值;

             option是设置的选项;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值