zoukankan      html  css  js  c++  java
  • Unix高级编程之进程控制

    进程控制

    ps aux
    ps axj
    ps axf
    ps axm

    一.进程标识符
    pid_t ---->long int
    进程的独一无二的标识

    0 调用进程(内核)
    1 init进程(用户态所有进程的祖先进程)

    getpid(2);
    getppid(2);

    进程的状态
    S 可中断的睡眠态
    R 运行态
    D 不可中断的睡眠态
    T 停止态
    X 终止态
    Z 僵尸态
    进程优先级
    s 会话组长
    l 多线程
    < 高优先级
    N 低优先级
    + 在前台进程组

    二.fork(2)
    父子进程之间的不同:
    <1>pid
    <2>ppid
    <3>记录锁
    <4>资源使用量和进程时间清零
    <5>未决信号
    <6>未决闹钟
    <7>fork返回值

    fork()创建子进程
    <1>不能保证哪个进程先运行
    <2>采用copy-on-write
    <3>在父进程中返回子进程id,子进程中返回0

    vfork()创建子进程
    <1>保证子进程先运行
    <2>共享父进程数据段及栈
    <3>用_exit(2)或者_Exit(2)终止进程

    孤儿进程
    僵尸进程

    三.wait(2)和waitpid(2);

    wait(&status); == waitpid(-1, &status, 0);

    四.exec(3);
    execl();
    execv();
    execlp();
    execvp();
    execle();

    五.
    进程关系
    1.会话(session):一个或多个进程组组成的
    getsid(2);
    setsid(2);

    2.进程组:一个或多个进程组成的
    getpgrp(2);
    getpgid(2);
    setpgid(2);

    守护进程
    <1>进程组的leader PGID == PID
    <2>会话的leader SID == PID
    <3>脱离控制终端

    创建守护进程步骤:
    <1>umask(0);
    <2>chdir("/");
    <3>关闭0,1,2
    <4>child-->setsid();

    log日志的书写
    openlog();
    syslog();
    closelog();

    daemon(3);

    六.竞争条件
    parent--->wait();
    child--->getppid() == 1

    七.system(3)
    fork()-->exec("/bin/sh", "sh", "-c", "ls -l", NULL)

    八.更改用户id和组id
    实际用户id
    有效用户id:校验文件权限 u+s
    保存设置用户id

    setuid(2);
    getuid(2);
    geteuid(2);

    九.进程时间
    times(2);

    real: >= sys+user;
    sys:
    user:

    十.解释器文件
    了解

    有时候,不小心知道了一些事,才发现自己所在乎的事是那么可笑。
  • 相关阅读:
    MAC 使用git时 不自动补全
    MAC 下 安装redis 并配置 php redis 扩展
    PHP日志 LOG4PHP 的配置与使用
    PHP数组 转 对象/对象 转 数组
    将数组打印到txt文件中
    Yii2控制器 返回 json 格式数据
    控制流输出26大小写英文字母
    员工领导部门关系类
    重写父类
    递归(recursion)
  • 原文地址:https://www.cnblogs.com/axjlxy/p/5859883.html
Copyright © 2011-2022 走看看