• 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:

    十.解释器文件
    了解

    有时候,不小心知道了一些事,才发现自己所在乎的事是那么可笑。
  • 相关阅读:
    逆光拍摄常见的问题(解决大光比问题)
    HDP和包围曝光
    直方图
    linux查找文件的命令【转】
    100篇大数据文章[转]
    squid
    修改/etc/resolv.conf又恢复到原来的状态?[转]
    python字符串及正则表达式[转]
    GraphLab介绍[转]
    Scala 中的 apply 和 update 方法[转]
  • 原文地址:https://www.cnblogs.com/axjlxy/p/5859883.html
Copyright © 2020-2023  润新知