当前位置:首页 > 资讯 > info6 > 正文

linux_c编程:进程(wait和waitpid函数)

发表于: 2016-08-01   作者:championhengyi   来源:转载   浏览:
摘要: 等待进程结束当子进程先于父进程退出时,如果父进程没有调用wait和waitpid函数,子进程就会进入僵尸状态#include #include pid_twait(int*statloc) pid_twaitpid(pid_tpid,int*statloc,intoptions) //wait函数的返回值是终止运行的子进程的pid,参数statloc存放的是子进程的退出码,状态信息将被写入sta

等待进程结束

当子进程先于父进程退出时,如果父进程没有调用wait和waitpid函数,子进程就会进入僵尸状态

#include<sys/types.h>
#include<sys/wait.h>
pid_t wait(int *statloc)
pid_t waitpid(pid_t pid, int *statloc, int options)

//wait函数的返回值是终止运行的子进程的pid,参数statloc存放的是子进程的退出码,状态信息将被写入statloc所指向的变量

//wait函数也会来等待子进程的结束,但它用于等待某个特定的子进程的pid,statloc和wait的含义相同,option如果被设置为WNOHANG,则父进程不被挂起而立即执行后面的代码

如果想让父进程周期性的检查某个特定子进程是否退出,可以写如下代码:
waitpid(child pid, (int *)0, WNOHANG)

如果子进程未退出则返回0,子进程已经结束,返回childpid,失败返回-1

进程的其他操作

  • 获得进程id
#include<sys/types.h>
#include<unistd.h>
pid_t getpid(void)
  • setuid和setgid
#include<sys/types.h>
#include<unistd.h>
int setuid(int uid)
int setgid(int gid)
//若进程具有root权限,则函数会将实际用户id,有效用户id设置为参数uid

//若进程不具有root权限,但uid等于实际用户id,则setuid只将有效用户id设置为uid,不改变实际用户id

//若两个条件都不满足,则函数调用失败,返回-1

//setgid和setuid相似
  • 改变进程的优先级
#include<sys/resource.h>
int nice(int increment)
{
    int old = getpriority(PRIO_PROCESS, getpid())
    return setpriority(PRIO_PROCESS, getpid(), oldpro + increment)
}

//代表进程优先级的数字越小,表示进程优先级越高
进程优先级的改变的具体参数用法感兴趣的朋友可以自行百度,这里不再讨论

附源码:

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/resource.h>
#include<sys/wait.h>

int main()
{
    int pid;
    int stat_val = 0;
    int oldpri, newpri;

    pid = fork();

    switch(pid)
    {
        case -1:
            perror("fork\n");
            exit(1);

        case 0:
            printf("Child is running, Curpid is %d, ParentPid is %d\n", pid, getppid());

            oldpri = getpriority(PRIO_PROCESS, getpid());
            printf("Old priority = %d\n", oldpri);

            newpri = nice(2);
            printf("New priority = %d\n", newpri);

            exit(0);

        default:
            printf("Parent is running, Childpid is %d, ParentPid is %d\n", pid, getpid());
        break;
    }

    wait(&stat_val);

    exit(0);
}

linux_c编程:进程(wait和waitpid函数)

编辑推荐
1. wait()和waitpid()函数说明 wait() 进程一旦调用了wait(), 就立即阻塞自己,由wait自动分析是否
1、wait和waitpid函数 #include <sys/types.h> #include <sys/wait.h> pid_t wait(int
Wait和waipid函数 当一个进程正常或异常终止的时候,内核就像其父进程发送SIGCHLD信号,因为子进程
分类: unix/linux学习篇 unix 环境高级编程 C/C++学习 2011-11-21 23:43 995人阅读 评论(7) 收藏
分类: unix/linux学习篇 unix 环境高级编程 C/C++学习 2011-11-21 23:43 818人阅读 评论(6) 收藏
wait()和waitpid() 函数说明 wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进
wait()和waitpid() 函数说明 wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进
本章包含内容有: 创建新进程 程序执行(program execution) 进程终止(process termination) 进
x86/Debian Linux/gcc 1 fork()创建子进程 (1) FORK(2) Linux Programmer’s Manual [头文件及原型]
1 fork()创建子进程 (1) FORK(2) Linux Programmer’s Manual [头文件及原型] #include <unistd.
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号