宁波网站建设费用是多少钱,关键词优化,网站引导页动态效果怎么做,静安制作企业网站前言
在Linux中#xff0c; 程序#xff08;program#xff09;是放在磁盘上的程序#xff0c;是不会执行的。 进程#xff08;process#xff09;是程序被触发#xff0c;从而加载到内存中的#xff0c;会被CPU随机执行。 Linux中#xff0c;有非常多的进程在实时运…前言
在Linux中 程序program是放在磁盘上的程序是不会执行的。 进程process是程序被触发从而加载到内存中的会被CPU随机执行。 Linux中有非常多的进程在实时运行对于进程的管理也是运维非常重要的一部分
Linux的程序变为进程的过程。 以 touch 命令为例子
1由用户去触发磁盘中的程序 2根据触发的用户的权限取得执行的权限不同的用户权限不同如root的是 UID/GID 0/0。 3取得程序运行的相关资料也就是程序的上下文。比如touch需要知道当前所在文件路径当前文件夹的权限。 4将执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中。 5Linux生成一个PID进程idLinux会根据程序的PID来管理此进程。同一个程序运行多次也会有不同的PID比如运行3次sleep多个用户登录执行/bin/bash他们的PID都是不同的。 6执行完毕后成功退出或者失败退出此时PID被收回内存中的数据消失。还有可能成为僵尸进程一直停留在内存中哈哈哈。
也可以理解我们可以通过对程序PID的操作来查看管理程序。
Linux中程序与程序间的关系
在 Linux 的程序调用通常称为 fork-and-exec 的流 程 程序都会借由父程序以复制 fork 的方式产生一个一模一样 的子程序 然后被复制出来的子程序再以 exec 的方式来执行实际要进 行的程序最终就成为一个子程序的存在。 在子程序执行的时候父程序会sleep。子程序结束的时子程序的PID内存中的数据会消失再回到父程序的流程中。
程序的前台运行与后台运行bash 的 job control
在某些特定的环境下会在/etc/security/limits.conf 里面设置使用者同时 可以登陆的连线数在这样的情况下某些使用者可能仅能以一个连线 来工作。所以有时候需要用单个bash来处理多个工作。这时候就需要把程序放在后台执行了。
直接将指令丢到背景中“执行”的
tar -zpcf /tmp/etc.tar.gz /etc 这条命令可以将打包的过程放到后台执行但是将工作丢到背景当中要特 别注意数据的流向。包括上面的讯息就有出现错误讯息导致我的前台被影响。
如果想要前台不被影响则可以像下面这样
tar -zpcvf /tmp/etc.tar.gz /etc /tmp/log.txt 21 如此一来输出的信息都给他传送到 /tmp/log.txt 当中当 然就不会影响到我们前台的作业了。 这就是数据流重导向的重要性。
将“目前”的工作丢到后台中“暂停”[ctrl]-z
如sleep 1000 这时后台程序会暂停不会再执行了。
使用 jobs -l 查看后台的程序。
[1] 和 [2] 是工作号可以通过工作号来操作任务。
将后台工作拿到前台来处理fg 任务编号 让工作在后台下的状态变成运行中 bg 任务编号 管理背景当中的工作 kill
kill向以 PID 进程号或者 JOBSPEC 任务声明指定的进程发送一个以 SIGSPEC 信号声明或 SIGNUM 信号编号命名的信号 来管理进程。 kill有如下的信号码
一般的话使用1915这三个即可达成很多目的了。
-1是重新加载配置文件。 -9 这个 signal 通常是用在“强制删除一个不正常的 工作”时所使用的 -15 则是以正常步骤结束一项工作15也是默认 值两者之间并不相同呦举上面的例子来说 我用 vim 的时候 不是会产生一个 .filename.swp 的文件吗 那么当使用 -15 这个 signal 时 vim 会尝试以正常的步骤来结束掉该 vi 的工作 所以 .filename.swp 会主动的被移除。但若是使用 -9 这个 signal 时由于该 vim 工作会被强制移除掉因此 .filename.swp 就会继续存在文件系统 当中。 通常使用 -9 是因为某些程序你 真的不知道怎么通过正常手段去终止他这才用到 -9 的
另外 kill 后面接的数字默认会是 PID 如果想要管理 bash 的工作控制就得要加上 %数字 了 这点也得特别留意才行喔
如 kill -9 %1 kill -9 %2
离线管理问题
要注意的是我们在工作管理当中提到的“背景”指的是在终端机 模式下可以避免 [crtl]-c 中断的一个情境 你可以说那个是 bash 的背 景并不是放到系统的背景去喔所以工作管理的背景依旧与终端机 有关啦 在这样的情况下如果你是以远端连线方式连接到你的 Linux 主机并且将工作以 的方式放到背景去 请问在工作尚未结束的 情况下你离线了该工作还会继续进行吗答案是“否”不会继续进 行而是会被中断掉。 简单说如果bash关掉当前bash的后台任务也会结束
那该如何处理呢 首先你可以参考前一章的 at 来处理即 可因为 at 是将工作放置到系统背景 而与终端机无关。如果不想要 使用 at 的话那你也可以尝试使用 nohup 这个指令来处理喔这个 nohup 可以让你在离线或登出系统后还能够让工作继续进行。他的语 法有点像这样 [rootstudy ~]# nohup [指令与参数] 在终端机前景中工作。 [rootstudy ~]# nohup [指令与参数] 在终端机背景中工作
有够好简单的指令吧上述指令需要注意的是 nohup 并不支持 bash 内置的指令因此你的指令必须要是外部指令才行。 我们来尝试 玩一下下面的任务吧
1. 先编辑一支会“睡着 500 秒”的程序
[rootstudy ~]# vim sleep500.sh #!/bin/bash /bin/sleep 500s /bin/echo “I have slept 500 seconds.”
2. 丢到背景中去执行并且立刻登出系统
[rootstudy ~]# chmod ax sleep500.sh [rootstudy ~]# nohup ./sleep500.sh [2] 14812 [rootstudy ~]# nohup: ignoring input and appending output to nohup.out’ 会告知这个讯息 [rootstudy ~]# exit
如果你再次登陆的话再使用 pstree 去查阅你的程序会发现 sleep500.sh 还在执行中喔并不会被中断掉 这样了解意思了吗由于 我们的程序最后会输出一个讯息但是 nohup 与终端机其实无关了 因此这个讯息的输出就会被导向“ ~/nohup.out ”所以你才会看到上述 指令中当你输入 nohup 后 会出现那个提示讯息啰。 如果你想要让在背景的工作在你登出后还能够继续的执行那么 使用 nohup 搭配 是不错的运行情境喔 可以参考看看
注意事项
这些工作所触发的程序必须来自于你 shell 的子程序只管理自己 的 bash 前景你可以控制与下达指令的这个环境称为前景的工作 foreground 背景可以自行运行的工作你无法使用 [ctrl]c 终止他可使用 bg/fg 调用该工作 背景中“执行”的程序不能等待 terminal/shell 的输入input