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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

step4 . day5 进程与进程的创建

發(fā)布時(shí)間:2024/4/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 step4 . day5 进程与进程的创建 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.什么是進(jìn)程:進(jìn)程是系統(tǒng)中正在運(yùn)行的一個(gè)程序,程序一旦運(yùn)行就是進(jìn)程,區(qū)別于程序的靜止?fàn)顟B(tài),進(jìn)程是一個(gè)動(dòng)態(tài)概念,包含了程序運(yùn)行時(shí)需求的資源總和

2.進(jìn)程的分類:交互進(jìn)程、批處理進(jìn)程、守護(hù)進(jìn)程(不依賴shell的后臺進(jìn)程)

3.進(jìn)程的狀態(tài):運(yùn)行態(tài)、停止態(tài)、不可中斷等待、可中斷等待、僵死態(tài)

4.進(jìn)程相關(guān)命令

ps -ef? 查看所有進(jìn)程

ps -elf? / ps -aux

PID 進(jìn)程號

PPID 父進(jìn)程號

CMD 進(jìn)程的名子

NI nice值 優(yōu)先級

ps -ef | grep ./a.out

top? 動(dòng)態(tài)顯示所有進(jìn)程??

nice? 改變進(jìn)程的優(yōu)先級 -20~19? 值越大優(yōu)先級越低

renice 動(dòng)態(tài)改變進(jìn)程優(yōu)先級

ctrl +z 把運(yùn)行的前臺進(jìn)程變?yōu)橥V箲B(tài)后臺進(jìn)程

bg 把后臺進(jìn)程變?yōu)檫\(yùn)行態(tài)

fg 把后臺進(jìn)程變?yōu)榍芭_

jobs 查看所有后臺程序

如果有多個(gè),加序號 如:fg 1,bg 2

?

5.進(jìn)程創(chuàng)建函數(shù)fork(),一個(gè)函數(shù)兩個(gè)返回值,父進(jìn)程返回值為子進(jìn)程ID,子進(jìn)程返回值為0,參見man手冊

特點(diǎn):

1.父子有相同的代碼段和數(shù)據(jù)段,資源是一樣的

2)邏輯地址空間獨(dú)立,物理有些是共享的。使用寫時(shí)copy技術(shù)節(jié)省系統(tǒng)資源

3)父或子進(jìn)程結(jié)束后,活著的進(jìn)程狀態(tài)。

父先死 子變孤兒 被init收養(yǎng)

子先死 子變僵尸,需f要父進(jìn)程收尸

4)父子進(jìn)程執(zhí)行順序不確定,由操作系統(tǒng)調(diào)度來確定。?

6. 退出應(yīng)用程序,exit結(jié)束程序前刷新緩沖區(qū),_exit不刷新緩沖區(qū)

7.wait 和 waitpid? ? 如果沒有子進(jìn)程退出,等待,如果有,則返回子進(jìn)程的pid號,參數(shù)status傳出退出時(shí)候的狀態(tài)值

8.exec函數(shù)族 和system函數(shù),用于在進(jìn)程中執(zhí)行另一個(gè)系統(tǒng)命令,system函數(shù)不會(huì)替換使用函數(shù)進(jìn)程的內(nèi)容,exec會(huì)替換執(zhí)行進(jìn)程的執(zhí)行內(nèi)容

9代碼demo? 創(chuàng)建連串子進(jìn)程(通過fork的返回值判斷是否繼續(xù)創(chuàng)建子進(jìn)程)


#include<stdio.h>
#include <unistd.h>


int main(int argc, const char *argv[])
{
pid_t t;
int i;
for(i = 0;i < 5;i++){
t = fork();
if(t != 0)
break;
}
if(t<0){
perror("fork");
return -1;
}else if(t = 0){
printf("I am subprocess\n");
while(1) sleep(1);
}else{
printf("I am parent process\n");
while(1) sleep(1);
}
return 0;

}

2.使用進(jìn)程模擬shell(使用字符串裁切或者system都行)


#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, const char *argv[])
{
pid_t t,t1;
int status,n=0;
char buf[16],*result;
char buf1[16];
char arg[8][8];
while(1){

t = fork();
if(t<0){
perror("fork");
return -1;
}else if(t == 0){
execlp("config.sh","config.sh",NULL);? ?//自己寫了一個(gè)簡單的shell腳本,配置了一下環(huán)境變量,省去了多次打印路徑的麻煩
exit(0);

}else{
printf(" ");
waitpid(t,&status,0);
}

fgets(buf,16,stdin);
strcpy(buf1,buf);

result = strtok(buf," ");
strcpy(arg[0],result);
n=1;
while(result != NULL){
strcpy(arg[n],result);
// printf("%s\n",arg[n]);
n++;
result = strtok(NULL," ");
}

t1 = fork();
if(t1<0){
perror("fork");
return -1;
}else if(t1 == 0){
system(buf1);
// printf("----------------\n");
//execlp(arg[0],arg);
//arg[3],arg[4],arg[5],arg[6],arg[7],NULL);
exit(0);

}else{
waitpid(t1,&status,0);
}


}

return 0;
}

?

2.守護(hù)進(jìn)程

創(chuàng)建順序:

1)創(chuàng)建一個(gè)子進(jìn)程,同時(shí)父進(jìn)程退出,目的是為了讓子進(jìn)程成為后臺進(jìn)程
2)設(shè)置setsid 設(shè)置會(huì)話組,把子進(jìn)程變?yōu)闀?huì)話組組長,獨(dú)立門戶,跟shell,界面等父進(jìn)程脫離干系
3)改變工作目錄,到一個(gè)穩(wěn)定的目錄下面chdir("/")
4)? umask(0),改變文件的屏蔽符,防止改變守護(hù)進(jìn)程的文件權(quán)限
5)關(guān)閉從父進(jìn)程繼承來的文件描述符

?

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(){
pid_t pid;
pid = fork();
if(pid<0){
perror("fork");
return 0;
}else if(pid>0){
exit(0);
}
//下面都是子進(jìn)程執(zhí)行的代碼
if(setsid()==-1){
perror("setsid");
exit(0);
}
chdir("/");
if(umask(0)<0){
perror("unmask");
exit(0);
}
int i;
//printf("getdtablesize()=%d\n",getdtablesize());
for(i=0;i<getdtablesize();i++)
{
// printf("i=%d\n",i);
close(i);
}

while(1){
sleep(1);
}



}

?

轉(zhuǎn)載于:https://www.cnblogs.com/huiji12321/p/11318394.html

與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的step4 . day5 进程与进程的创建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。