关于linux程序的查看、前台运行、后台运行、杀死的管理操作。

2024-06-02 12:36

本文主要是介绍关于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程序的查看、前台运行、后台运行、杀死的管理操作。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023986

相关文章

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

java Stream操作转换方法

《javaStream操作转换方法》文章总结了Java8中流(Stream)API的多种常用方法,包括创建流、过滤、遍历、分组、排序、去重、查找、匹配、转换、归约、打印日志、最大最小值、统计、连接、... 目录流创建1、list 转 map2、filter()过滤3、foreach遍历4、groupingB