关于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…...

网络安全基础技术扫盲篇 — 名词解释之“数据包“
用通俗易懂的话说: 数据包就像是一个信封。当你写信给某个人时,你将内容写在一张纸上,然后将纸叠起来并放入信封中,就形成了一个完整要发送的数据内容。信封上有发件人和收件人的详细地址,还有一些其他必要的信息&…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...