linux基础知识——创建进程
1.fork函數
\qquad執行一個可執行的程序,就創建一個進程。除此之外,還可以使用fork()函數創建一個子進程。
\qquadfork函數的返回值有兩個,本質是一個進程變成兩個進程,這兩個進程各自對fork做返回:返回子進程pid(父進程非負整數);返回0(子進程創建成功)。
\qquad運行結果:
---------------------- I am parent,pid = 17257, ppid = 17200 I am child,pid = 17258, ppid = 17257 ----------------------- -----------------------\qquad在程序執行到pid=fork()時,程序會創建一個子進程,
\qquad此時父進程的pid>0;執行
\qquad然后繼續向下執行
printf("-----------------------\n");\qquad此時子進程pid=0;執行
printf("I am child,pid = %u, ppid = %lu\n",getpid(),getppid());\qquad然后繼續向下執行
printf("-----------------------\n");2.循環創建子進程
#include<stdio.h> #include<unistd.h> int main() {pid_t pid;int i;for(i=0;i<5;i++){pid = fork();if(pid==-1){printf("錯誤\n");}else if(pid==0){break;}}if(i<5){sleep(i);printf("i am %dth child,pid=%u\n",i+1,getpid());}else{sleep(i);printf("i am parent,pid=%u\n",getpid());}return 0; }3.getuid()和getgid()函數
\qquad獲取當前進程的實際用戶ID:uid_t getuid(void)
\qquad獲取當前進程的有效用戶ID:uid_t geteuid(void)
\qquad獲取當前進程的使用用戶組ID:gid_t getgid(void)
\qquad獲取當前進程的有效用戶組ID:gid_t getegid(void)
4.父子進程在fork()之后的異同
\qquad在fork之后:
\qquad相同點:全局變量;.data;.text;棧;堆;環境變量;用戶ID;進程工作目錄…
\qquad不同點:進程ID;fork返回值;父進程ID;進程運行時間;鬧鐘/定時器;未決信號集
\qquad父子遵循讀時共享寫時復制的原則。父子進程共享:文件描述符(打開文件的結構體);mmap建立的映射區。而父子進程執行的先后順序,取決于內核的調度算法。
總結
以上是生活随笔為你收集整理的linux基础知识——创建进程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《动手学深度学习 PyTorch版》学习
- 下一篇: Linux命令整理 —— 目录结构