创建子进程:
pid_t fork(void);
父进程返回进程ID,子进程返回0
父进程返回进程ID,子进程返回0
附加:
错误处理
1.若干ifelse
2.定义过一个errno,所以的系统调用出错都返回-1
然后将错误编号记录到errno中
通过strerror得到错误编号对应的描述
错误处理
1.若干ifelse
2.定义过一个errno,所以的系统调用出错都返回-1
然后将错误编号记录到errno中
通过strerror得到错误编号对应的描述
获得进程ID:
pid_t getpid(void);
获得父进程ID:
pid_t getppid(void);
fork的注意点:
1.fork之后,父/子进程交替运行
2.如果父进程死亡,子进程活着,子进程叫做进程。孤儿进程托管给1号进程,1号进程也叫孤儿院。
3.如果父进程活着,子进程死亡,子进程就是一个僵尸进程。僵尸进程会占用少量系统资源。僵尸进程是有害的。
弄死进程的方法:
1.ctrl+c
2.kill pid
kill 不能杀死僵尸进程
1.ctrl+c
2.kill pid
kill 不能杀死僵尸进程
进程虚拟成文件 /proc/pid/
进程优先级:(-20~19) 越小优先级越高
1.nice -n 优先级 程序名
2.renice 优先级 -p 程序名
3.top shift>/< r pid
2.renice 优先级 -p 程序名
3.top shift>/< r pid
写时拷贝:
没有必要全部都拷贝一份,父进程什么时候修改,什么时候拷贝一份出来。称之为写时拷贝.
pid_t vfork(void); (尽量不使用)
特点:
1.父进程阻塞,直到子进程运行完毕。
2.就算写时,也不拷贝
3.必须使用exit或者exec。
4.每个系统对vfork的实现或多或少都有问题,不要使用。
1.父进程阻塞,直到子进程运行完毕。
2.就算写时,也不拷贝
3.必须使用exit或者exec。
4.每个系统对vfork的实现或多或少都有问题,不要使用。