日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux基础知识——创建进程

發布時間:2024/7/19 linux 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux基础知识——创建进程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.fork函數

\qquad執行一個可執行的程序,就創建一個進程。除此之外,還可以使用fork()函數創建一個子進程。
\qquadfork函數的返回值有兩個,本質是一個進程變成兩個進程,這兩個進程各自對fork做返回:返回子進程pid(父進程非負整數);返回0(子進程創建成功)。

#include<stdio.h> #include <unistd.h>int main() {pid_t pid;printf("----------------------\n");pid = fork();if(pid==-1){printf("error\n");}else if(pid==0){printf("I am child,pid = %u, ppid = %lu\n",getpid(),getppid());// getpid()返回調用進程的進程ID;getppid()返回調用父級的進程ID}else{printf("I am parent,pid = %u, ppid = %lu\n",getpid(),getppid());sleep(1);}printf("-----------------------\n");return 0; }

\qquad運行結果:

---------------------- I am parent,pid = 17257, ppid = 17200 I am child,pid = 17258, ppid = 17257 ----------------------- -----------------------

\qquad在程序執行到pid=fork()時,程序會創建一個子進程,
\qquad此時父進程的pid>0;執行

printf("I am parent,pid = %u, ppid = %lu\n",getpid(),getppid());sleep(1);

\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基础知识——创建进程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。