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

做包装的网站有哪些有哪些可以做课件赚钱的网站

做包装的网站有哪些,有哪些可以做课件赚钱的网站,网站logo做h1标签,北京卓天下网站建设公司#x1f3e0;关于专栏#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程及数据库等内容。 #x1f3af;每天努力一点点#xff0c;技术变化看得见 文章目录 进程状态进程状态查看R运行状态#xff08;running#xff09;S睡眠状态#xff08;sleeping关于专栏Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程及数据库等内容。 每天努力一点点技术变化看得见 文章目录 进程状态进程状态查看R运行状态runningS睡眠状态sleepingD磁盘休眠状态Disk sleepT停止状态stoppedt调试/追踪状态tracing stopX死亡状态/终止状态deadZ僵尸状态/僵尸进程zombie 孤儿进程进程优先级基本概念查看系统进程PRI及NI修改进程优先级top命令renice命令 关于进程的相关概念 进程状态 关于进程状态我们来看看Linux源代码中总共有几种状态↓↓↓ static const char* cinst task_state_array[] { R(runnning),/* 0 */ S(sleeping),/* 1 */ D(disk sleep), /* 2 */ T(stopped),/* 3 */ t(tracing stop),/* 4 */ X(dead), /* 16 */ Z(zombie) /* 32 */ };在介绍这些状态时将使用使用描述代码验证的方式但部分状态无法使用代码验证。在开始介绍前我们需要了解如何查看进程状态↓↓↓ 进程状态查看 ps aux / ps axj查看进程状态总共有两种方式分别是ps aux及ps axj。使用它们查看进程的效果如下图所示↓↓↓ ★ps关于ps命令的更多用法可以查询man手册。 R运行状态running 我们在创建了进程之后操作系统会给该进程创建一个task_struct结构体该结构体中包含进程状态、pid、ppid、优先级等字段该结构体就是PCB进程控制块用于记录进程各类信息。 管理好这些进程我们需要只要管理好task_struct结构体即可。因此操作系统将task_struct链成一个链表队列。 由于计算机中的各类资源包括CPU、内存、外部设备等均十分宝贵各个进程在获取某个资源时可能需要到某个资源上排队。而等待CPU资源的进程将被链成一个队列这个队列叫做运行队列run_queue。而处于运行队列上的进程的状态就是运行状态即R状态。 下面我们编写一个死循环并查看该进程的状态↓↓↓ #include stdio.h int main() {while(1){}return 0; }上面的STAT的R就是运行状态。 S睡眠状态sleeping 如果我们编写一个循环打印hello world的程序则执行该程序的进程的状态是R状态吗 #include stdio.h int main() {while(1){printf(hello world\n);}retrun 0; }这里我执行ps axj | head -1 ps axj | grep test命令得到的进程状态是S状态即睡眠状态。这是为什么呢那什么是睡眠状态呢 我们在执行上面的程序时进程需要访问外设而外设相比与cpu而言速度非常慢。该进程为了打印hello world它需要到对应的外设上等待这里的外设是显示器在它需要使用外设资源时cpu将该进程的PCB从运行队列中取下来并链入显示器的等待队列中。在除了cpu以外的队列中等待时这时的状态就是S休眠状态。等该进程打印完毕后再链入cpu继续向下执行。但由于上面的程序频繁访问外设导致它在运行队列中的时间非常短。因而我们在查看该进程状态时绝大多数情况下它都处于睡眠状态。 D磁盘休眠状态Disk sleep 在操作系统中如果一个进程处于睡眠状态即S状态。如果此时操作系统负载过大则可能杀死该进程。这也就是为什么某些软件服务在用户量过大时出现某些用户无法获取服务的原因。 从操作系统角度来说操作系统为了维护服务器能稳定运行不得不杀死某些进程从进程角度来说进程正常运行而被操作系统强制关闭进程也无能为力。 如果我们希望某些关键性进程即使在操作系统负载过大时也不会被杀死则可以将该进程设置为D状态即磁盘休眠状态也称为磁盘睡眠状态、深度睡眠状态。处于该状态的进程不能被操作系统中断也不能被操作系统唤醒。该进程只有自己醒来才能被操作系统调度执行只有该进程执行完毕才能被操作系统回收。 ★ps该状态无法使用程序演示 T停止状态stopped 在操作系统中可以给某些进程发送信号发送信号的格式为 kill -[信号编号] [进程pid]下面我们使用kill -l查看所有信号及其对应的编号↓↓↓ 上图的18号信号SIGCONT为进程继续执行信号19号信号为SIGSTOP为进程暂停信号。如果我们给某个进程发送19号信号则它将处于T状态即暂停状态。 下面我们给上面循环打印hello world的进程发送19号信号再对比发送信号前后的状态变化 kill -19 19093在接收到19号SIGSTOP信号后19093号进程停止打印hello world并且此时它的状态为T状态即暂停状态。 如果我们给19093号进程发送18号SIGCONT信号会是什么效果呢 发送信号后19093号进程继续打印hello world并且它的状态又变回S状态即睡眠状态。但这里不同的是原先的状态是S而此时的状态是S。这两者有什么区别呢 S状态下的进程在使用ctrlC时可以被终止而S状态下的进程使用ctrlC却无法被终止。这里带有号的称为前台进程不带号的称为后台进程。后台进程需要使用kill -9 [进程号]发送9号信号来终止。 ★psT状态与S状态的区别T状态单纯暂停并不等待某种资源而S状态是为了等待某种资源。 t调试/追踪状态tracing stop 我们在编写完程序后可以在使用gcc编译如果在编译命令的末尾加上-g选项则会生成一个debug版本的程序。如果不带-g选项gcc默认生成的是release版本。 我们使用gcc生成下面程序的release和debug版本↓↓↓ #include stdio.hint Add(int left, int right) {return left right; }int main() {int num1 10;int num2 20;printf(%d %d %d\n, num1. num2, Add(num1, num2));return 0; }从上图可以发现debug版本所占的内存空间会大于release版本因为debug版本中包含调试信息。 下面我们使用gdb对test_g进行调试↓↓↓ 由于在12行处打了断点此时程序停止在12行处。我们使用ps axj | head -1 ps axj | grep test查看当前进程状态↓↓↓ 此时的进程状态为t状态即调试状态也称为追踪状态。 X死亡状态/终止状态dead 如果进程执行结束了操作系统会马上回收该进程的资源吗进程此时占用内存等资源不一定。如果此时cpu上此时正在处理更加重要、紧急的进程则操作系统此时不会马上回收已经执行结束的进程而是将该进程标识为X状态即死亡状态也成为终止状态。 标记为X状态的进程表示该进程可以被操作系统回收。但具体什么时候回收取决于操作系统。由于X状态瞬时性较强难以使用程序演示这里就不使用程序演示了。 Z僵尸状态/僵尸进程zombie 僵尸状态zombie也称为僵死状态是一种比较特殊的状态。该状态发生在子进程退出而父进程没有回收子进程资源时即父进程没有使用waitpid读取子进程的退出信息此时子进程就会进入僵尸状态。 僵尸进程会以终止状态保持在进程表中并且会一直等待父进程读取退出状态码。所以只要子进程退出父进程还在运行但父进程没有读取子进程状态则子进程会进入Z状态。 下面创建的程序使得子进程保持5秒的僵尸状态↓↓↓ #include stdio.h #include stdlib.h #include assert.h #include unistd.h #include sys/types.hint main() {pid_t id fork();assert(id ! -1);if(id 0){printf(I am child process! pid %d, ppid %d\n, getpid(), getppid());sleep(5);exit(0);}printf(I am parent process! pid %d\n, getpid());sleep(10);return 0; }执行上述程序并使用while :; do ps axj | head -1 ps axj | grep test; sleep 1; echo ############# done; 脚本每1秒钟对执行内容做监视。 我们可以发现在子进程退出后父进程没有退出此时的子进程的状态变为Z状态即僵尸状态。 僵尸进程的危害 进程的退出状态必须被维持下去因为他要告诉关心它的进程父进程你交给我的任务我办的怎么样了。可父进程如果一直不读取那子进程就一直处于Z状态。 维护退出状态本身就是要用数据维护也属于进程基本信息所以保存在task_struct(PCB)中换句话说Z状态一直不退出PCB一直都要维护。 那一个父进程创建了很多子进程如果不回收就会造成内存资源的浪费。因为数据结构对象本身就要占用内存想想C语言中定义一个结构体变量对象是要在内存的某个位置进行开辟空间 ★ps关于僵尸进程如何被处理的问题将在后序文章中的介绍。 孤儿进程 上面已经将进程的各种状态讲述完毕接下来我们再了解另一种进程——孤儿进程。 父进程如果提前退出子进程后退出子进程进入Z之后那该如何处理呢 如果让子进程一直保持Z状态则会造成内存泄漏但此时子进程的父进程已经执行结束没有进程可以来清理子进程的资源了这种子进程被称为孤儿进程。操作系统为了解决这个问题对于父进程已经执行结束而子进程后退出的该子进程将被1号init进程领养其资源将由init进程进行回收。 下面代码中父进程比子进程执行结束前5秒就退出↓↓↓ #include stdio.h #include stdlib.h #include assert.h #include unistd.h #include sys/types.hint main() {pid_t id fork();assert(id ! -1);if(id 0){int cnt 10;while(cnt 0){printf(I am child process, pid %d, ppid %d\n, getpid(), getppid());sleep(1);cnt--;}exit(0);}printf(I am parent process, pid %d\n, getpid());sleep(5);return 0; }由程序执行结果可以看出子进程前5秒的父进程pid为15480由于父进程在子进程推出前5秒就推出了此时子进程被1号init进程领养故此时该进程的父进程pid为1。 进程优先级 基本概念 优先权高的进程有优先执行权利可以优先获得cpu资源。 配置进程优先权对多任务环境的linux很有用可以改善系统性能。对于多核计算机可以把进程运行到指定的CPU上这样一来把不重要的进程安排到某个CPU可以大大改善系统整体性能。 查看系统进程 我们可以执行ps -le来查看系统中所有进程的详细信息-e选项表示所有进程-l选项表示显示进程详细信息 上图中 UID : 代表执行者的身份 PID : 代表这个进程的代号 PPID 代表这个进程是由哪个进程发展衍生而来的亦即父进程的代号 PRI 代表这个进程可被执行的优先级其值越小越早被执行 NI 代表这个进程的nice值 PRI及NI PRI是进程的优先级或者通俗点说就是程序被CPU执行的先后顺序此值越小进程的优先级别越高。NI就是我们所要说的nice值了其表示进程可被执行的优先级的修正数值。PRI值越小越快被执行那么加入nice值后将会使得PRI变为PRI(new)PRI(old)nice。 这样当nice值为负值的时候那么该程序将会优先级值将变小即其优先级会变高则其越快被执行。所以调整进程优先级在Linux下就是调整进程nice值。nice其取值范围是-20至19一共40个级别。 那如果PRI(new)PRI(old)nice那么我的程序起始优先级PRI为80我对它重复设置10000次nice值为-20它的优先级PRI是不是变成80-20*10000呢答案是否定的。在Linux操作系统中PRI起始都为80nice值得范围为-19到20。当我们设置了新的nice值时该进程的PRI80nice值。也就是说PRI的范围在[80-20,8019]之间。 ★ps进程的nice值不是进程的优先级进程优先级与nice值不是一个概念但是进程nice值会影响到进程的优先级变化。可以理解nice值是进程优先级的修正修正数据。 修改进程优先级 top命令 首先我们运行一个名为test的死循环程序。此时它的PRI为80NI为0。 top命令修改进程优先级的方法如果要设置小于0的nice值即提高进程优先级此时需要使用sudo提权 ①执行top命令 ②输入r并输入待修改进程优先级的进程pid。 ③输入nice值这里输入10。 我们使用ps -el | head -1 ps -el | grep test查看进程优先级发现test的PRI变为90NI变为10。 ★ps上图中我们将nice值设置为10则该进程的PRI801090。如果我们在此基础上设置nice值为15则该进程的优先级为PRI801595。 renice命令 renice命令使用格式为 renice [nice值] -p [进程pid]下图演示将20269号进程的nice值修改为15。 我们使用ps -el | head -1 ps -el | grep test查看进程优先级发现test的PRI变为95NI变为15。 ★ps如果要给进程设置比原nice值更小的nice值需要使用sudo提权。 关于进程的相关概念 竞争性: 系统进程数目众多而CPU资源只有少量甚至1个所以进程之间是具有竞争属性的。为了高效完成任务更合理竞争相关资源便具有了优先级。 独立性: 多进程运行需要独享各种资源多进程运行期间互不干扰。 并行: 多个进程在多个CPU下分别同时进行运行这称之为并行。 并发: 多个进程在一个CPU下采用进程切换的方式在一段时间之内让多个进程都得以推进称之为并发。 关于并行和并发这里做一下更详细的解释 并行就是多个进程同时执行。而并发并不是例如我们有3个进程在一个CPU上并发执行第1个进程先执行1ms接下来由第2个进程执行1ms再由第3个进程执行1ms然后又由第1个进程执行以此类推…像这种明明各个进程是交替执行的但由于各个进程都在向前运行而进程交替运行的操作用户感知不到用户以为这3个进程是各占用1个CPU并同时执行的这种被称为并发。 欢迎进入从浅学到熟知Linux专栏查看更多文章。 如果上述内容有任何问题欢迎在下方留言区指正b(▽)d
http://www.zqtcl.cn/news/739762/

相关文章:

  • 摄影网站建设需求分析wordpress一键关注
  • 做学历的网站什么是短视频营销
  • 网站线上推广方式广告海外推广
  • 免费网站注册申请海口网站seo
  • ppt免费下载雷锋网站WordPress5分钟建站
  • 商店网站制作做签名照的网站
  • 自己制作一个网站广州自助网站制作
  • 个人网站吗wordpress超精简主题
  • 手机版免费申请微网站wordpress 跳转链接
  • 网站建设与管理好吗广州白云最新消息
  • 织梦动漫网站模版wordpress 页面文章列表
  • 东莞做网站沃德长沙市网站开发
  • 哪些网站做的最好厦门网站建设网站
  • 网站安全事件应急处置机制建设类似百度的网站
  • 内蒙古知名网站建设网站测速工具
  • 怎样建立网站赚钱怎么登录住建局官网
  • 建站自学网页转向功能网站
  • 网站都有什么费用做酒店网站有哪些目录
  • 本地郑州网站建设东莞网站优化中易
  • 动态域名可以建网站德州公司做网站
  • 深圳建设银行官方网站wordpress 添加qq
  • 甘肃第九建设集团公司网站网站对企业的好处
  • 论坛网站建设规划书公司网站建设与设计制作
  • 做棋牌游戏网站犯法吗如何进行搜索引擎的优化
  • 常见的网站首页布局有哪几种陈光锋网站运营推广新动向
  • 手机网站活动策划方案开一个设计公司
  • 宝塔建设网站教程visual studio 2010 网站开发教程
  • 做网站购买服务器做谷歌网站使用什么统计代码吗
  • 网站系统与网站源码的关系emlog轻松转wordpress
  • 网站的简介怎么在后台炒做吉林省住房城乡建设厅网站首页