夫为剑者

示之以虚 开之以利 后之以发 先之以至

常用链接

统计

积分与排名

最新评论

linux上的c编程笔记-------进程的控制

调用下列函数取得进程的各种识别号:

         uid_t getuid(void);        //返回真实用户识别号
         uid_t getpid(void);        //返回真实组识别号
         uid_t geteuid(void);       //返回有效用户识别号
         uid_t getepid(void);       //返回有效组识别号
         pid_t getppid(void);      //返回父进程识别号
         pid_t getpgrp(void);      //返回进程组识别号

进程的创建:

        #include<sys/types.h>
        #include<unistd.h>
        pid_t fork(void);
        正确返回:在父进程中返回子进程的进程号,在子进程中返回0;
        错误返回:-1;
        单调用,双返回的函数。子进程是父进程的拷贝,子进程从父进程那里得到了数据段和堆栈段的拷贝,需要重新分配内存,而不是与父进程共享内存。只读的代码段,以共享内存方式访问。
       pid_t vfork(void);
       调用流程和返回值与fork完全相同。但是vfork并不完全拷贝父进程的数据段,用vfork创建进程的主要目的是用exec函数执行另外的程序。实际上,在没有调用exec函数或者exit函数之前,vfork创建的进程和父进程是共享数据段的。vfork和fork的另一不同是fork对进程执行顺序没有规定,而vfork则是子进程先运行直至调用exec或者exit之后,父进程的执行顺序才没有限制。

进程等待:

       当一个进程结束时会产生一个终止状态字,然后内核发出一个SIGCHLD信号通知父进程。因为子进程结束对父进程是异步的,所以这个SIGCHLD信号对父进程也是异步的。父进程可以不响应,也可以调用wait或者waitpia进行处理,缺省不响应。
        #include <sys/types.h>
        #include <sys/wait.h>
        pid_t wait(int *statloc);
        pid_t waitpid(pid_t pid,int *statloc,int options);
        正常情况下返回进程id,错误返回-1,其它返回0;
        参数statloc是个整型指针,如果不为空的话,子进程的终止状态字就存放在该参数指定的内存位置。
       返回的这个状态字是个整数,特定位表示特定信息,只需调用sys/wait.h里定义的几个宏就可以得到相关信息。它们是:
       WIFEXITED(status);                 //当子进程正常结束时返回为真
       WIFSIGNALED(status);           //当子进程异常结束时返回为真
       WEXITSTATUS(status);           //当WIFEXIDED(status)为真时调用,返回状态字的低八位
       WTERMSIG(status);                 //当WIFSINGALEN(status)为真时调用,返回引起终止的信号代号
       waitpid函数参数含义:
       pid:       <-1: 等待进程组id等于pid的绝对值的子进程;
                        =-1: 等待任何子进程,此时相当于wait;
                         =0:   等待进程组id与父进程组id相同的子进程;
                         >0:   等待进程id等于pid的子进程;  
      options:   进一步控制waitpid的运行。它可以取0,也可以取常数,也可以取常数组合(用OR连接)。

posted on 2005-12-06 13:50 vivip 阅读(279) 评论(0)  编辑 收藏 引用 所属分类: 学习笔记


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理