嵌入式--软件--应用程序--C语言--进程--学习笔记(高级篇-进程基础篇)

嵌入式--软件--应用程序--C语言--进程--学习笔记(高级篇-进程基础篇),第1张

0-- 系列文章目录 1.进程篇:  (本文章)(线程篇链接)(多线程和通信篇) 2.网络篇:  (文章链接) 3.数组篇:  (文章链接) 4.指针篇:  (文章链接) 5.内核篇:  (文章链接) 6.硬件篇:  (文章链接)(视频链接) ...........

1--当前文章目录
  • 前言
  • 一、理论部分
  • 二、实际 *** 作
    • 1.创建子进程(fork)
    • 2.子进程进阶(五个儿子)
    • 3.中止进程(exit)
    • 4.进程回收(wait   waitpid)
    • 5.执行指定的程序(exec族)
    • 6.守护进程(五步走)
    • 7.GDB调试多进程(后续添加)
  • 总结

一.理论部分

进程概念:程序   ---存放在磁盘上的指令和数据的有序集合(文件)                                                                  进程   ---执行一个程序所分配的资源的总称,进程是程序的一次执行过程(创建、调度、执行和消亡

进程类型: 交互进程、批处理进程、守护进程。

进程状态:运行态、等待态、停止态、死亡态

 ​

 ​

 进程常用命令--基于Linux
进程常用命令
ps此刻运行的进程(-e   -f    -l)
top实时显示进程(shift +> 后翻页,shift +< 前翻页)(top -p 41)
/proc查看(某某)进程详细信息
nice nice [-n NI值] 命令(NI 范围是 -20~19)           renice [优先级] PID
jobs查看后台进程
bg将挂起的进程在后台运行
ctrl+z把运行的前台进程转为后台并停止
./test &把test程序后台运行
 进程各项含义

 ​

 ​

静态的

二.实际 *** 作       (1)创建进程
#include
#include

int main(){
        
        pid_t pid;
        printf("fu jin cheng\n");

        //fork后面的内容属于子进程的内容
        pid = fork();
        printf("pid=%d\n",(int)pid);
        printf("zi jin cheng\n");
        
} 

/*
int main(){

	pid_t pid;
	pid = fork();
	if(pid>0){             //fu jin cheng
	
	printf("fu jin cheng\n");
	printf("pid=%d\n",(int)pid);

	}else if(pid ==0){     //zi jin cheng
	
	printf("zi jin cheng\n");
	printf("pid=%d\n",(int)pid);
	
	}else if(pid <0){      //chu cuo le

	}

}*/

 ​

 ​

 ​

#include
#include

int main(){

	pid_t pid;
	pid = fork();
	if(pid>0){             //fu jin cheng
	
	printf("fu jin cheng\n");
	printf("pid=%d\n",(int)pid);
	
    while(1){
		sleep(1);
		printf("fu jin cheng\n");
	}
	}else if(pid ==0){     //zi jin cheng
	
	printf("zi jin cheng\n");
	printf("pid=%d\n",(int)pid);
	
    while(1){
		sleep(1);
		printf("zi jin cheng\n");
	}
	}else if(pid <0){      //chu cuo le

	}

}

 ​

        (2)子进程进阶(五个儿子)

 ​

#include
#include

int main(){
    pid_t pid;
    int i;

    for(i=0;i<5;i++){
        pid = fork();
        if(pid<0){
            perror("fork ");
            return 0;
        }else if(pid == 0){
            printf("zi jin cheng \n");
            sleep(4);
            break;
        }else{
            printf("fu jin cheng\n");
            sleep(4);
        }
    }
}

        (3)中止进程
#include 
#include 
#include 

int main(int argc,char**argv){

   printf("hello world\n");
   //exit(0);

   printf("after exit\n");
   return 0;
}

        (4)进程回收(wait   waitpid)

#include 
#include 
#include 
#include 

int main(int argc, char** argv){

   pid_t pid;
   pid_t rpid;
   pid = fork();
   int status;
   if(pid<0){
      perror("fork");
      return 0;
   }
   else if(pid == 0){
       sleep(1);
       printf("child will exit\n");
       exit(2);

   }else if(pid >0){
       //rpid = wait(&status);
       //sleep(20);
       waitpid(pid,&status,0);
       printf("Get child status=%x\n",WEXITSTATUS(status));
   }

   while(1){
     sleep(1);
   }

}

(5)执行指定的程序(exec族)

进程当前内容被指定程序替代

#include

//jin5test
int main(int argc,char **argv){

    printf("hello world %s,%s\n",argv[1],argv[2]);

}
#include 
#include 


int main(){

    printf("exec zhi qian\n");

    if(execl("./jin5test","fsdafsafls","-a","-l","./",NULL)<0){
        perror("excel");
    }

    printf("execl zhi hou\n");      //用jin5test替代了当前的程序,所以应该不会打印这句话

}

 

 在子进程中,去替换东西就,父进程的程序不会被替代

#include 
#include 


int main(){

    pid_t pid;
    printf("exec zhi qian\n");

    pid = fork();
    if(pid == 0){
        if(execl("./jin5test","fsdafsafls","-a","-l","./",NULL)<0){
            perror("excel");
        }
        printf("zi jin cheng\n");        //子进程的程序,会被execl替代掉
    }
    printf("execl zhi hou\n");

}

 

 (6)守护进程(五步走)

护进程(Daemon Process)是Linux三种进程类型之一,是 Linux 中的后台服务进程

一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件

•创建子进程,父进程退出子进程创建新会话 .更改当前工作目录重设文件权限掩码关闭打开的文件描述符

 

 

 

 

 

 (7)GDB调试多进程程序

等后续再详细写

三.总结

在兴趣的基础上,搞点有意思的东西。

四.系列文章,其他模块可直接参考开头的链接目录

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/2991567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存