关于linux程序的查看、前台运行、后台运行、杀死的管理操作。
前言
在Linux中,
程序(program)是放在磁盘上的程序,是不会执行的。
进程(process)是程序被触发,从而加载到内存中的,会被CPU随机执行。
Linux中,有非常多的进程在实时运行,对于进程的管理也是运维非常重要的一部分
Linux的程序变为进程的过程。 以 touch 命令为例子
1:由用户去触发磁盘中的程序,
2:根据触发的用户的权限取得执行的权限,不同的用户权限不同,如root的是 UID/GID = 0/0。
3:取得程序运行的相关资料,也就是程序的上下文。比如touch需要知道当前所在文件路径,当前文件夹的权限。
4:将执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中。
5:Linux生成一个PID进程id,Linux会根据程序的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 2>&1 &
如此一来,输出的信息都给他传送到 /tmp/log.txt 当中,当
然就不会影响到我们前台的作业了。 这就是数据流重导向的重要性。
将“目前”的工作丢到后台中“暂停”:[ctrl]-z
如:sleep 1000
这时,后台程序会暂停,不会再执行了。
使用 jobs -l 查看后台的程序。
[1] 和 [2] 是工作号,可以通过工作号来操作任务。

将后台工作拿到前台来处理:fg + 任务编号

让工作在后台下的状态变成运行中: bg + 任务编号

管理背景当中的工作: kill
kill向以 PID 进程号或者 JOBSPEC 任务声明指定的进程发送一个以
SIGSPEC 信号声明或 SIGNUM 信号编号命名的信号 来管理进程。
kill有如下的信号码

一般的话,使用1,9,15这三个即可达成很多目的了。
-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 可以让你在离线或登出系统后,还能够让工作继续进行。他的语
法有点像这样:
[root@study ~]# nohup [指令与参数] <==在终端机前景中工作。
[root@study ~]# nohup [指令与参数] & <==在终端机背景中工作
有够好简单的指令吧!上述指令需要注意的是, nohup 并不支持
bash 内置的指令,因此你的指令必须要是外部指令才行。 我们来尝试
玩一下下面的任务吧!
1. 先编辑一支会“睡着 500 秒”的程序:
[root@study ~]# vim sleep500.sh
#!/bin/bash
/bin/sleep 500s
/bin/echo “I have slept 500 seconds.”
2. 丢到背景中去执行,并且立刻登出系统:
[root@study ~]# chmod a+x sleep500.sh
[root@study ~]# nohup ./sleep500.sh &
[2] 14812
[root@study ~]# nohup: ignoring input and appending output to `nohup.out’ <==会告知这个讯息!
[root@study ~]# exit
如果你再次登陆的话,再使用 pstree 去查阅你的程序,会发现
sleep500.sh 还在执行中喔!并不会被中断掉! 这样了解意思了吗?由于
我们的程序最后会输出一个讯息,但是 nohup 与终端机其实无关了,
因此这个讯息的输出就会被导向“ ~/nohup.out ”,所以你才会看到上述
指令中,当你输入 nohup 后, 会出现那个提示讯息啰。
如果你想要让在背景的工作在你登出后还能够继续的执行,那么
使用 nohup 搭配 & 是不错的运行情境喔! 可以参考看看!
注意事项:
这些工作所触发的程序必须来自于你 shell 的子程序(只管理自己
的 bash);
前景:你可以控制与下达指令的这个环境称为前景的工作
(foreground);
背景:可以自行运行的工作,你无法使用 [ctrl]+c 终止他,可使用
bg/fg 调用该工作;
背景中“执行”的程序不能等待 terminal/shell 的输入(input)
相关文章:
关于linux程序的查看、前台运行、后台运行、杀死的管理操作。
前言 在Linux中, 程序(program)是放在磁盘上的程序,是不会执行的。 进程(process)是程序被触发,从而加载到内存中的,会被CPU随机执行。 Linux中,有非常多的进程在实时运…...
STM32作业设计
目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…...
PHPSTOM配置Laradock,xdebug,phpunit
原理图: 片面理解: phpstorm启用一个9000端口,这个端口用来接收到信息后,启用xdebug功能。服务器端(docker), 当客户端访问laravel项目域名后, 并读取xdebug.ini的配置, 把调试的请求数据, 向配置里面的端口发送消息, 配置里面的端…...
使用Java进行数据分析和处理:应用在实际业务场景中的技术
在当今数据驱动的时代,数据分析和处理已经成为各行各业中不可或缺的一部分。Java作为一种广泛应用于企业级开发的编程语言,也在数据领域展现出了强大的能力。本文将探讨如何使用Java进行数据分析和处理,以及在实际业务场景中应用的技术。 ##…...
C++中的List
摘要 C 标准库中的 std::list 是一种双向链表容器,它允许在常数时间内进行插入和删除操作,每个元素包含一个指向前一个和后一个元素的指针。这给我们开发提供了高效的插入和删除操作。 引入头文件 要使用 std::list,需要包含头文件 <li…...
go map 如何比较两个 map 相等
go map 如何比较两个 map 相等 都为 nil非空、长度相等,指向同一个 map 实体对象相应的 key 指向的 value 相等 直接将使用 map1 map2 是错误的。这种写法只能比较 map 是否为 nil。因此只能是遍历map 的每个元素,比较元素是否都是深度相等。...
牛客网刷题 | BC108 反斜线形图案
目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 KiKi学习了循环&am…...
数据的表示和运算
目录 一.各进制间的相互转换 1.各进制转化为10进制 2.二进制和八进制,十六进制之间地相互转化 3.十进制转换为其他进制 二.BCD码(Binary-Coded Decimal,用二进制编码的十进制) 1.8421码 2.余3码 3.2421码 三.无符号整数 …...
【爬虫工具】油管视频批量采集软件
一、背景介绍 1.1 爬取目标 我用Python独立开发了一款爬虫软件,作用是:通过搜索关键词采集ytb的搜索结果,包含14个关键字段:关键词,页码,视频标题,视频id,视频链接,发布时间,视频时长,频道名称,频道id,频道链接,播放数,点赞数,评…...
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
【LeetCode刷题】Day 14 题目1:153.寻找旋转排序数组中的最小值思路分析:思路1:二分查找:以A为参照思路2:二分查找,以D为参照 题目2:LCR 173.点名思路分析:思路1:遍历查找…...
使用python绘制小提琴图
使用python绘制小提琴图 小提琴图效果代码 小提琴图 小提琴图(Violin Plot)是一种结合了箱线图和核密度估计图的图形,用于显示数据分布的情况。它不仅展示了数据的四分位数、最大值和最小值,还通过密度曲线展示了数据的分布形状。…...
【C++】6-7 你好,输出的格式控制(三角形)
6-7 你好,输出的格式控制(三角形) 分数 10 全屏浏览 切换布局 作者 向训文 单位 惠州学院 完善程序:输入行数rows(大于0),第一行输出rows个*,接下来每行的*个数减1,直…...
力扣每日一题 6/1
2928.给小朋友们分糖果[简单] 题目: 给你两个正整数 n 和 limit 。 请你将 n 颗糖果分给 3 位小朋友,确保没有任何小朋友得到超过 limit 颗糖果,请你返回满足此条件下的 总方案数 。 示例 1: 输入:n 5, limit 2 …...
决定短视频打开率的要素:成都鼎茂宏升文化传媒公司
在当下这个短视频盛行的时代,无论是个人创作者还是企业品牌,都希望通过短视频平台获得更多的曝光和关注。然而,如何让自己的短视频在众多内容中脱颖而出,吸引用户的点击和观看,成为了摆在我们面前的重要问题。成都…...
解决通过包管理器下载 Sharp 时遇到的二进制文件下载问题
sharp 是一个流行的 Node.js 库,用于高性能的图片处理。它依赖于预构建的 libvips 二进制文件,这些文件通常是从官方仓库下载的。 但在某些地区的网络环境下,直接下载可能会因为网络限制而失败。 通过在命令行中分别执行以下两行内容即可&a…...
反序输出c++
题目描述 输入n个数,要求程序按输入时的逆序把这n个数打印出来,已知整数不超过100个。也就是说,按输入相反顺序打印这n个数。 输入 输入一行共有n个数,每个数之间用空格隔开。 输出 如题要求:一行,共有n个数&…...
C++ 封装线程池(结合QT支持信号机制)
纯C风格线程池 纯C 风格线程池可参考这篇文章 https://llfc.club/category?catid225RaiVNI8pFDD5L4m807g7ZwmF#!aid/2c2IJUcCUOfzEQQRRdOXYIZuCjP 视频教程 相关线程池和并发编程的视频可以看看这个连接: https://www.bilibili.com/video/BV1Xt421H7M7/?vd_s…...
c# 学习教程
打印语句 折叠代码 变量 整形 浮点型 特殊类型...
【ros2】入门
ros2 在机器人控制,无人机飞行控制,自动驾驶领域,ros2可是如日中天的存在。无论是学习其架构设计,还是使用ros2开发机器人,ros2的是一个很错的选择。 安装 在ros2的,推荐“小鱼”的工具 wget http://fishros.com/i…...
网络安全基础技术扫盲篇 — 名词解释之“数据包“
用通俗易懂的话说: 数据包就像是一个信封。当你写信给某个人时,你将内容写在一张纸上,然后将纸叠起来并放入信封中,就形成了一个完整要发送的数据内容。信封上有发件人和收件人的详细地址,还有一些其他必要的信息&…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
