Linux 进程控制

Posted mfcheer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 进程控制相关的知识,希望对你有一定的参考价值。

进程

1 进程创建

fork()函数创建子进程。
“调用一次,返回两次”

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

int main()

    pid_t pid;
    if ((pid = fork())<0)
    
        printf("error\\n");
        exit(0);
    
    else if (pid == 0)
    
        printf("in fork\\n");
    
    else
    
        printf("father\\n");
    
    return 0;

代码打印结果为:
father
in fork

vfork()函数,与父进程共享地址空间,使用vfork时父进程会被堵塞,使用_exit()退出子进程。

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

int main()

    pid_t pid;
    int var = 5;
    printf("process id %ld\\n",(long)getpid());
    if ((pid = vfork())<0)
    
        printf("error\\n");
        return 1;
    
    else if (pid == 0)
    
        var++;
        printf("in fork\\n");
        _exit(0);
    
    else
    
        printf("father\\n");
        return 0;
    
    return 0;

运行结果:

execve()函数创建子进程,在另外一个文件执行。

new.cpp文件

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

int main()

    puts("hello");
    return 0;

A.cpp

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

extern char **environ;

int main(int argc,char *argv[])

    pid_t pid;
    if ((pid =fork()) < 0)
    
        puts("error!\\n");
    
    if (pid == 0)
        execve("new",argv,environ);
    else
        puts("ok");
    return 0;

执行A.cpp运行结果:

2 进程等待

wait()函数,挂起父进程,等待子进程运行结束。

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

void exit_s(int status)

    if (WIFEXITED(status))
        printf("normal exit,status = %d\\n",WEXITSTATUS(status));
    else
        printf("single exit!,status = %d\\n",WTERMSIG(status));


int main(void)

    pid_t pid,pid1;
    int status;
    if ((pid = fork()) < 0)
    
        puts("error");
        exit(0);
       
    else if (pid == 0)
    
        printf("child process\\n");
        exit(2);
    
    else
    
        printf("father process\\nwait error!\\n");
        exit(1);
    
    exit_s(status);

    if ((pid = fork()) < 0)
    
        puts("error");
        exit(1);
       
    else if (pid == 0)
    
        printf("child process\\n");
        pid1 = getpid();
        kill(pid1,14);
        exit(2);
    
    if (wait(&status) != pid)
    
        printf("father process\\nwait error!\\n");
        exit(0);
    
    exit_s(status);
    exit(0);

运行结果:

3 进程结束

exit和_exit
区别:exit退出时释放占用的资源及清空缓冲区。_exit则不具备这个功能。

4 进程组

setpgid创建新的进程组

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

int main(void)

    int a;
    pid_t pgid,pid;

    pid = getpid();
    pgid = getpgrp();
    a = setpgid(pid,pgid);
    printf("a = %d , pid = %d ,pgid = %d \\n",a,pid,pgid);
    return 0;

运行结果:

5 时间片的分配

进程优先级:

头文件

#include <sched.h>

setpriority()和getpriority()设置和获取线程的优先级。

6 进程的操作

getpid()进程id
getppid()父进程id
getuid()用户id
geteuid()有效用户id
getgid()用户组id
getegid()有效用户组id
setuid()设置用户标识
setgid()设置用户组标识
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sched.h>
#include <pthread.h>

int main(void)

    int a1,a2;
    a1 = setuid(0);
    a2 = setgid(100);
    printf("a1 = %d  a2 = %d\\n",a1,a2);
    return 0;

以上是关于Linux 进程控制的主要内容,如果未能解决你的问题,请参考以下文章

Linux 如何查看进程和控制进程

Linux-进程控制

谁可以提供一些关于linux的进程控制的资料?尽快,非常感谢。

<Linux>进程控制

linux进程控制

linux进程控制