3-1进程标识与fork
进程标识 一个程序被加载到内存中运行,系统会为这个进程分配相应的标识信息,比如 pid,ppid,uid,euid,pgid,sid,gid,egid… 进程查看命令 pstree 可看出进程间的关系 父子,兄弟; ps -exj ps -aux ps … PID PPID PGID UID TTY STAT TIME COMMAND laradock@3a6c2da5a07b:/var/www$ ps exj PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 0 24 24 24 pts/1 495 Ss 1000 0:00 bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado 24 495 495 24 pts/1 495 R+ 1000 13:37 php demo4.php LC_ALL=en_US.UTF-8 NVM_DIR=/home/laradock/.nvm LS_COLORS=no=00:fi=00: 0 496 496 496 pts/2 1051 Ss 1000 0:00 bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/larado 496 1051 1051 496 pts/2 1051 R+ 1000 0:00 ps exj LC_ALL=en_US.UTF-8 NVM_DIR=/home/laradock/.nvm LS_COLORS=no=00:fi=00:di=01;3 进程状态码 D uninterruptible sleep (usually IO) I Idle kernel thread R running or runnable (on run queue) S interruptible sleep (waiting for an event to complete) T stopped by job control signal t stopped by debugger during the tracing W paging (not valid since the 2.6.xx kernel) X dead (should never be seen) Z defunct (“zombie”) process, terminated but not reaped by its parent 打印进程标识 fprintf(STDOUT, "pid=%d\n", posix_getpid()); // 进程自己的标识 PID fprintf(STDOUT, "ppid=%d\n", posix_getppid()); // 父进程的标识 PPID fprintf(STDOUT, "pgid=%d\n", posix_getpgrp()); // 进程组长标识 PGID fprintf(STDOUT, "sid=%d\n", posix_getsid(posix_getpid())); // 会话标识 SID fprintf(STDOUT, "uid=%d\n", posix_getuid()); // 用户标识 UID 当前登录用户,实际用户id fprintf(STDOUT, "gid=%d\n", posix_getgid()); // 组ID GID fprintf(STDOUT, "euid=%d\n", posix_geteuid()); // 有效用户id EUID fprintf(STDOUT, "egid=%d\n", posix_getegid()); // 有效组id EUID pid=506 ppid=37 pgid=506 sid=37 uid=1000 gid=1000 euid=1000 egid=1000 fork pcntl_fork ...