当前位置: 首页 > wzjs >正文

兰州网站优化可以免费发广告的网站

兰州网站优化,可以免费发广告的网站,郑州上街区网站建设公司,shopex网站一、核心概念 进程定义 进程是程序的一次执行实例,是资源分配和调度的基本单位。特性:动态性、并发性、独立性、异步性、结构性。 进程控制块(PCB) 操作系统通过task_struct结构体(PCB)管理进程&#xff0…
一、核心概念
  1. 进程定义

    • 进程是程序的一次执行实例,是资源分配和调度的基本单位。
    • 特性:动态性、并发性、独立性、异步性、结构性。
  2. 进程控制块(PCB)

    • 操作系统通过task_struct结构体(PCB)管理进程,包含:
      • 进程标识(PID、PPID)
      • 状态信息(运行、就绪、阻塞等)
      • 资源信息(内存、打开的文件、信号量等)
  3. 进程标识

    • PID(进程ID):唯一标识进程的正整数。
    • PPID(父进程ID):创建当前进程的父进程PID。
  4. 进程状态

    状态描述
    运行正在占用CPU执行指令
    就绪已获得除CPU外的所有资源,等待调度
    阻塞因等待事件(如I/O完成)暂停执行
    终止进程执行完毕或被强制终止
  5. 进程与程序的区别

    • 程序:静态的代码文件(如a.out)。
    • 进程:动态的程序执行实例,包含执行上下文和资源。

二、进程结构
  1. 内存布局

    • 代码段:存储可执行指令。
    • 数据段:存储全局变量和静态变量。
    • 堆段:动态分配的内存(如malloc)。
    • 栈段:存储局部变量和函数调用信息。
  2. 进程模式

    • 用户模式:执行用户程序,权限受限。
    • 内核模式:执行系统调用或中断处理,可操作特权指令。

三、进程操作函数
1. 创建进程(fork
#include <unistd.h>
pid_t fork(void);  // 返回值:子进程返回0,父进程返回子进程PID,失败返回-1

示例:创建子进程并区分父子进程逻辑

#include <stdio.h>
#include <unistd.h>int main() {pid_t pid = fork();if (pid == 0) {printf("子进程PID: %d\n", getpid());  // 子进程逻辑} else if (pid > 0) {printf("父进程PID: %d, 子进程PID: %d\n", getpid(), pid);  // 父进程逻辑} else {perror("fork失败");}return 0;
}

输出

父进程PID: 1234, 子进程PID: 1235
子进程PID: 1235
2. 进程退出(exit vs _exit
  • exit:清理缓冲区后退出(如刷新stdio流)。
  • _exit:直接终止进程,不清理缓冲区。
#include <stdlib.h>
void exit(int status);        // 标准退出函数
#include <unistd.h>
void _exit(int status);       // 直接终止进程
3. 进程替换(exec函数族)
#include <unistd.h>
int execl(const char *path, const char *arg, ... /* NULL */);  // 路径+参数列表
int execv(const char *path, char *const argv[]);               // 路径+参数数组
int execlp(const char *file, const char *arg, ...);            // 文件名+自动搜索PATH

示例:使用execlp执行ls命令

#include <unistd.h>int main() {execlp("ls", "ls", "-l", NULL);  // 替换当前进程为ls -lperror("exec失败");              // 若exec失败才会执行return 1;
}
4. 进程等待(wait
#include <sys/wait.h>
pid_t wait(int *status);  // 等待任意子进程结束,返回子进程PID

示例:父进程等待子进程结束

#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>int main() {pid_t pid = fork();if (pid == 0) {printf("子进程运行\n");sleep(2);_exit(0);} else {wait(NULL);  // 阻塞等待子进程结束printf("子进程已终止\n");}return 0;
}

输出

子进程运行
(2秒后)
子进程已终止

四、综合例题

题目:使用forkexec实现一个简单的Shell,执行用户输入的命令。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>int main() {char command[256];while (1) {printf("> ");fgets(command, sizeof(command), stdin);command[strcspn(command, "\n")] = '\0';  // 去除换行符pid_t pid = fork();if (pid == 0) {  // 子进程执行命令execlp(command, command, NULL);perror("命令执行失败");_exit(1);} else if (pid > 0) {  // 父进程等待子进程结束wait(NULL);} else {perror("fork失败");}}return 0;
}

输出示例

> ls
file1.txt  file2.txt
> pwd
/home/user

五、常见问题
  1. fork后的执行顺序:父子进程执行顺序由调度器决定,无法预知。
  2. 僵尸进程:子进程终止后未被父进程wait回收,需通过信号处理或显式回收避免。
  3. exec函数族的选择
    • execlp/execvp:自动搜索PATH环境变量。
    • execle/execve:可指定自定义环境变量。

总结

  1. 进程管理核心:通过fork创建进程,exec替换进程映像,wait同步进程。
  2. 关键区别
    • exit_exit:前者清理缓冲区,后者直接终止。
    • fork返回值:父进程返回子进程PID,子进程返回0。
  3. 应用场景
    • 多任务处理(如Web服务器)。
    • 进程间通信(需结合管道、信号等机制)。
    • 实现Shell或任务调度器。

通过掌握进程控制函数,能够编写高效的多进程程序,充分利用系统资源。

http://www.dtcms.com/wzjs/259018.html

相关文章:

  • 北京服饰网站建设nba最新消息新闻报道
  • 建一个公司网站要多少钱武汉千锋教育培训机构怎么样
  • dreamweaver个人网站模板下载信阳网站推广公司
  • 小百姓这个网站谁做的微信怎么做推广
  • 怎么免费网做百度收录的网站大数据营销案例分析
  • 做p2p投资理财的网站企业网络营销系统分析报告
  • 做网站要自己租服务器吗抖音搜索关键词排名
  • 如何用word做网站地图网站建设的系统流程图
  • 滨海网站建设公司seo网站优化方案案例
  • 沌口做网站seo优化上海牛巨微
  • 东莞网站建设团队全网天下外贸网站都有哪些
  • 深圳网站建站建设公司地址今日山东新闻头条
  • 资料网站模板沈阳cms模板建站
  • wordpress 上传 重命名网站如何做优化推广
  • 做网站挣钱企业网络营销策略分析
  • 北京养老网站开发广告网址
  • 广元市利州区建设局网站如何设置友情链接
  • 大学做视频网站100条经典广告语
  • 怎样做网站卖手机号厦门网站搜索引擎优化
  • 12333上海公共招聘网登录网络优化网站
  • 在那个网站做定制旅游搜索引擎推广文案
  • 用织梦做网站还要不要服务器做网站的软件叫什么
  • html颜色代码表临沂seo顾问
  • 樟木头镇做网站房地产新闻最新消息
  • 网站开发转软件开发关键词排名优化如何
  • 什么网站做宣传好百度网站推广费用
  • 网站线下推广怎么做太原网站建设开发
  • 网站后台怎么做图片链接如何在互联网推广自己的产品
  • 服务器做网站有什么好处b2b网站有哪些平台
  • 海阳玖网站建设重庆网站外包