Linux内核中的Linux进程是如何创建的?

Linux内核中的Linux进程是如何创建的?,第1张

前三个和最后一个是两个类型。前三个主要是Linux用来创建新的进程(线程)而设计的,exec()系列函数则是用来用指定的程序替换当前进程的所有内容。所以exec()系列函数经常在前三个函数使用之后调用,来创建一个全新的程序运行环境。Linux用init进程启动其他进程的过程一般都是这样的。

下面说fork、vfork和clone三个函数。这三个函数分别调用了sys_fork、sys_vfork、sys_clone,最终都调用了do_fork函数,差别在于参数的传递和一些基本的准备工作不同。可见这三者最终达到的最本质的目的都是创建一个新的进程。在这里需要明确一下,Linux内核中没有独立的“线程”结构,Linux的线程就是轻量级进程,换言之基本控制结构和Linux的进程是一样的(都是通过struct task_struct管理)。

fork是最简单的调用,不需要任何参数,仅仅是在创建一个子进程并为其创建一个独立于父进程的空间。fork使用COW(写时拷贝)机制,并且COW了父进程的栈空间。

vfork是一个过时的应用,vfork也是创建一个子进程,但是子进程共享父进程的空间。在vfork创建子进程之后,父进程阻塞,直到子进程执行了exec()或者exit()。vfork最初是因为fork没有实现COW机制,而很多情况下fork之后会紧接着exec,而exec的执行相当于之前fork复制的空间全部变成了无用功,所以设计了vfork。而现在fork使用了COW机制,唯一的代价仅仅是复制父进程页表的代价,所以vfork不应该出现在新的代码之中。在Linux的manpage中队vfork有这样一段话:It is rather unfortunate that Linux revived this specter from the past. The BSD man page states: "This system call will be eliminated when proper system sharing mechanisms are implemented. Users should not depend on the memory sharing semantics of vfork() as it will, in that case, be made synonymous to fork(2)."

clone是Linux为创建线程设计的(虽然也可以用clone创建进程)。所以可以说clone是fork的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等等。clone和fork的调用方式也很不相同,clone调用需要传入一个函数,该函数在子进程中执行。此外,clone和fork最大不同在于clone不再复制父进程的栈空间,而是自己创建一个新的。

关于Linux命令的介绍,看看《linux就该这么学》,具体关于这一章地址3w(dot)linuxprobe/chapter-02(dot)html

第一阶段:linux基础入门

Linux基础入门主要包括: Linux硬件基础、Linux发展历史、Linux系统安装、xshell连接、xshell优化、SSH远程连接故障问题排查、L inux基础优化、Linux目录结构知识、Linux文件属性、Linux通配符、正则表达式、Linux系统权限等

第二阶段:linux系统管理进阶

linux系统管理进阶包括:Linux定时任务、Linux用户管理、Linux磁盘与文件系统、Linux三剑客之sed命令等。

第三阶段:Linux Shell基础

Linux Shell基础包括:Shell编程基础、Linux三剑客之awk命令等。

第四阶段:Linux网络基础

第五阶段:Linux网络服务

Linux网络服务包括:集群实战架构开始及环境准备、rsync数据同步服务、Linux全网备份项目、nfs网络存储服务精讲、inotify/sersync实时数据同步/nfs存储实时备份项目等。

第六阶段:Linux重要网络服务

Linux重要网络服务包括:http协议/www服务基础、nginx web介绍及基础实践、nginx web、lnmp环境部署/数据库异机迁移/共享数据异机迁移到NFS系统、nginx负载均衡、keepalived高可用等。

第七阶段:Ansible自动化运维与Zabbix监控

Ansible自动化运维与Zabbix监控包括: SSH服务秘钥认证、ansible批量自动化管理集群、 zabbix监控等。

第九阶段:大规模集群高可用服务(Lvs、Keepalived)

第十阶段:Java Tomcat服务及防火墙Iptables

第十一阶段:MySQL DBA高级应用实践

MySQL DBA高级应用实践包括:MySQL数据库入门基础命令、MySQL数据库进阶备份恢复、MySQL数据库深入事务引擎、MySQL数据库优化SQL语句优化、MySQL数据库集群主从复制/读写分离、MySQL数据库高可用/mha/keepalved等。

第十二阶段:高性能数据库Redis和Memcached课程

第十三阶段:Linux大规模集群架构构建(200台)

第十四阶段:Linux Shell编程企业案例实战

第十五阶段:企业级代码发布上线方案(SVN和Git)

第十六阶段企业级Kvm虚拟化与OpenStack云计算

第十七阶段公有云阿里云8大组件构建集群实战

第十八阶段:Docker技术企业应用实践

第十九阶段:Python自动化入门及进阶

第二十阶段:职业规划与高薪就业指导

Linux技术的发展引起了很多企业和个人的关注。市场对Linux运维的需求逐渐增加,学习Linux技术的人越来越多。在Linux运维中,进程是必须学习掌握的技能。那么Linux中如何启动进程?常用的进程调度命令有哪些? 执行中的程序称作进程。当程序的可执行文件存储在存储器中并运行时,每个进程将被动态分配系统资源、内存、安全属性和相关状态。多个进程可以与同一个程序相关联,并在同一时间执行,而不会相互干扰。 *** 作系统将有效地管理和跟踪所有正在运行的进程。 Linux中如何启动进程?启动进程的方法是什么? 手工启动。用户在输入端发出命令,直接启动进程。分为前台启动和后台启动。前台启动:直接在SHELL中输入命令进行启动。后台启动:启动一个目前并不紧急的进程。 调度启动。系统管理员根据系统资源和进程占用资源的情况,事先进行调度安排,指定任务运行的时间和场合,到时候系统会自动完成该任务。 常用的进程调度命令有哪些? 常用的进程调度命令有:at、batch、crontab。 以上便是关于“如何启动或终止进程?常用的进程调度命令有哪些?”的相关介绍。想要成为一名优秀的Linux运维工程师,需要掌握更多的Linux知识。


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

原文地址: https://outofmemory.cn/yw/7357748.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存