linux进程控制--学习笔迹2

5 篇文章 0 订阅

进程创建

getpid函数需要包含的头文件,以及函数的定义:

       #include <sys/types.h>
       #include <unistd.h>

       pid_t getpid(void);//返回当前进程id
       pid_t getppid(void);

fork函数需要包含的头文件,以及函数的定义:

       #include <unistd.h>
       pid_t fork(void);//在父进程返回进程号,在子进程中返回0,错误返回-1

例1

#include "stdio.h"
#include <sys/types.h>
#include <unistd.h>
int main()
{
        pid_t pid;
        int data = 10;
        while(1)
        {
                printf("please input a data\n");
                scanf("%d",&data);
                if(data==1)
                {
                        pid =fork();
                        if(pid>0)//父
                        {
                                 printf("this is father=%d\n",getpid());
                        }
                        else if(pid ==0)//子
                        {
                             printf("do net request,pid=%d\n",getpid());
                        }
                }
                else
                {
                        printf("wait do nothing");
                }
        }
        return 0;
}

vfork函数需要包含的头文件,以及函数的定义:
与fork区别:1、直接使用父进程存储空间,不拷贝。
2、子进程调用exit()退出后,父进程才执行。

       #include <sys/types.h>
       #include <unistd.h>
       
       pid_t vfork(void);

进程退出

exit函数需要包含的头文件,以及函数的定义:

   #include <stdlib.h>

   void exit(int status);

status的值为0正常退出,其他值为在执行中发生错误。

wait函数包含的头文件,以及函数的定义:

   #include <sys/types.h>
   #include <sys/wait.h>

   pid_t wait(int *status);

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

   int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
                   /* This is the glibc and POSIX interface; see
                      NOTES for information on the raw system call. */

status为空的时候表示不关心退出的状态。
waitpid的option可以选择WNOHANG不阻塞。
WUNTERACED:如果子进程暂停则立马返回,结束状态不予理会。

WEXITSTATUS(status)可以解析出退出的状态。

返回值:成功则返回子进程识别码,失败返回-1.

进程启动exec族

       #include <unistd.h>

       extern char **environ;

       int execl(const char *path, const char *arg, ...
                       /* (char  *) NULL */);
       int execlp(const char *file, const char *arg, ...
                       /* (char  *) NULL */);
       int execle(const char *path, const char *arg, ...
                       /*, (char *) NULL, char * const envp[] */);
       int execv(const char *path, char *const argv[]);
       int execvp(const char *file, char *const argv[]);
       int execvpe(const char *file, char *const argv[],
                       char *const envp[]);

execl:
path:文件路径。后面argv[0],argv[1],…最后一个必须为空指针。
返回值成功函数不返回,失败返回-1.失败原因在error中。
execlp:
file:PATH环境变量所指的目录查找符合的file文件名,其他同上。

system函数需要包含的头文件,以及函数的定义:

       #include <stdlib.h>

       int system(const char *command);

string:执行的命令。
返回值:调用失败时返回127,其他原因失败返回-1。

popen函数需要包含的头文件,以及函数的定义:

       #include <stdio.h>
       FILE *popen(const char *command, const char *type);
       int pclose(FILE *stream);

command执行的命令。type:"r"则文件指针连接到command标准输出。“w”则文件指针连接到标准输入。
返回值:调用失败时返回127,其他原因失败返回-1。
例:

#include "stdlib.h"
#include "unistd.h"
int main()
{
        char ret[1024]={0};
        FILE *fp;
        fp=popen("ps","r");
        int nread=fread(ret,1,1024,fp);
        printf("read ret %d byte,ret=%s\n",nread,ret);
        return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值