LInux后台运行程序

测试c代码

#include <stdio.h>
#include <unistd.h>
int main() {for (int i;; ++i) {printf("b数值 %d\n", i);fflush(stdout);sleep(3);}
}

使用Ctrl+Z可以将当前正在运行的程序放到后台并暂停它。如果你想要继续这个暂停的程序,可以使用fg命令将它重新切换到前台运行。如果想要在后台继续运行,就用 bg命令。

用&结尾

./b.out &

& 命令会将 b.out 放到后台运行,但是仍然与当前终端关联。这意味着,如果你关闭了当前终端,该命令可能会收到 SIGHUP(挂起信号)并终止。

./b.out > /dev/null 2>&1 &

这种方式将程序的标准输出和标准错误输出重定向到 /dev/null,即丢弃输出,使程序在后台运行。

使用nohup命令

nohup ./b.out &

nohup命令可以让程序忽略挂断信号(SIGHUP),并将程序的标准输出和标准错误输出重定向到一个文件中(默认是当前目录下 nohup.out 文件)。

&表示程序放到后台运行,nohup表示忽略挂断信号,退出终端不影响。

如果你希望自定义 nohup 命令的输出文件,可以使用重定向符号 > 或 >> 来指定输出文件的名称或路径。这样可以将程序的标准输出和标准错误输出重定向到你指定的文件中。

# 如果 custom_output.log 文件不存在,将会创建该文件;如果已存在,则会覆盖文件内容。
nohup ./b.out > custom_output.log &
# 将输出追加到已存在的文件末尾,可以使用 >> 符号。
nohup ./b.out >> custom_output.log &

使用disown命令

在程序已经在前台运行时,可以使用disown命令将其移到后台运行。

./b.out
# 按下 Ctrl+Z 暂停程序
bg             # 将程序移到后台运行
disown         # 断开程序与终端的关联

disown 命令用于断开一个已经在后台运行的命令或作业与当前终端的关联,使得该命令不再受终端关闭的影响。使用 disown 命令后,命令的输出将不会被保存到 nohup.out 文件中,而是丢失。

对于自定义输出并不影响,断开终端后依然会持续输出。

./b.out > output.txt 2>&1 &
disown

这样会将 b.out 程序放到后台运行,并且不再与当前终端关联,终端关闭后程序继续在后台执行。

当然可以直接把命令写在同一行,这样直接就是后台运行,并断开了与当前终端的关联。

./b.out > output.txt 2>&1 & disown

结束后台程序

使用 Ctrl+C 并不能直接终止程序,因为 Ctrl+C 通常是用来发送中断信号(SIGINT)给前台进程的,而你的程序此时是在后台运行的。

方法1:使用 fg 将程序切换到前台运行,然后再使用 Ctrl+C 终止程序。

如果你多次执行 ./b.out > output.txt 2>&1 & 启动了多个后台进程,那么当你使用 fg 命令时,默认会将最后一个放入后台的进程调至前台。这是因为 fg 命令通常会作用于最近的或者指定的后台进程。如果要指定具体的后台进程,可以使用 % 后跟进程号或者任务号,例如 %1%2 等。

如果你需要查看当前所有后台任务的信息,可以使用 jobs 命令列出,并查看任务号,然后再使用 fg %任务号 将指定任务调至前台。

如果你在断开终端后再次进入时,使用 fg 命令无法将之前在后台运行的进程调至前台,这通常是因为断开终端会导致与后台进程的控制终端断开联系,从而失去了对进程的控制能力。

这时也可以用jobs命令获取任务号,然后 `fg %任务号 将指定任务调至前台。

方法2:使用 kill 命令发送信号给后台进程:

首先,可以使用 ps 命令查找进程的 PID(进程号):

ps aux | grep b.out

找到对应的进程号,然后使用 kill 命令发送 SIGINT 信号(通常是 Ctrl+C 发送的信号):

kill -SIGINT PID

其中 PID 是你找到的进程号。

注意:如果程序在后台运行,但输出在终端,可能导致结束命令还没输完就被刷新屏幕了。可以先把命令写到记事本上,然后复制到终端。

方法3:使用 pkill 或 killall 命令:

pkill b.out
#or
killall b.out

默认情况下,pkill 会终止所有匹配条件的进程,可以使用 -n 选项来指定只终止最早匹配的一个进程。
测试下来匹配到的是最后一个开启的程序。

pkill -n b.out

pkill 命令并不支持仅匹配前几个的选项,要么终止一个,要么终止全部。
killall 命令总是终止所有匹配的进程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/37873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go 语言切片遍历地址会发生改变吗?

引言&#xff1a;今天面试的时候&#xff0c;面试官问了一道学 Go 语言的同学都会的简单代码&#xff0c;是关于 Go 语言 for 循环问题的&#xff0c;他询问了一个点&#xff0c;循环中共享变量的地址会发生改变吗&#xff1f; 相信听到这个问题的你&#xff0c;第一反应肯定是…

开发指南037-链式编程

平台提倡链式编程。所谓链式编程就是把过去多行的语句通过.符号串联为一句&#xff08;注意为了可读性&#xff0c;往往通过在.符号处换行&#xff09;&#xff0c;直观的对比如下&#xff1a; 非链式&#xff1a; object.setPropertyA(A); object.setPropertyB(B); object.set…

Webpack: 深入理解图像加载原理与最佳实践

概述 图形图像资源是当代 Web 应用的最常用、实惠的内容、装饰元素之一&#xff0c;但在 Webpack 出现之前对图像资源的处理复杂度特别高&#xff0c;需要借助一系列工具(甚至 Photoshop)完成压缩、雪碧图、hash、部署等操作。 而在 Webpack 中&#xff0c;图像以及其它多媒体…

基于MongoDB的电影影评分析

项目源码及资料 项目介绍 1、从豆瓣网爬取Top10的电影数据 爬取网址: https://movie.douban.com/top250 1.1 爬取Top10的影视信息 mv_data [] i 0 for x in soup.select(.item):i 1mv_name re.search(>([^<])<, str(x.select(.info > .hd > a > .tit…

c++和c#和c语言

C、C# 和 C 语言之间有关系&#xff0c;但它们在设计目标、应用领域和语法特性上也有显著的区别。以下是它们之间的关系和主要区别&#xff1a; 关系 C 语言&#xff1a; 基础&#xff1a;C 语言是一种通用的过程式编程语言&#xff0c;开发于20世纪70年代&#xff0c;用于系统…

2023下半年11月网络规划设计师论文真题

论文一 论虚拟化网络架构的规划与建设 随着信息技术的发展,网络以及软件厂商的产品、企业网络的规划按照NaaS模型进行演进已经成为一种共识。在NaaS的理念下,企业的IT专业人员将能够从选项菜单中订购网络基础设施组件,根据业务需求进行设计,并在短时间内交付和运行整个网…

【动态规划】2306. 公司命名

本文涉及知识点 动态规划汇总 LeetCode 2306. 公司命名 给你一个字符串数组 ideas 表示在公司命名过程中使用的名字列表。公司命名流程如下&#xff1a; 从 ideas 中选择 2 个 不同 名字&#xff0c;称为 ideaA 和 ideaB 。 交换 ideaA 和 ideaB 的首字母。 如果得到的两个新…

Python 面试【★★★★★】

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

大数据可视化实验(七):Python数据可视化

目录 一、实验目的... 1 二、实验环境... 1 三、实验内容... 1 1&#xff09;绘制带颜色的柱状图。.. 1 2&#xff09;绘制堆叠柱状图。.. 3 3&#xff09;绘制数学函数曲线图。.. 4 4&#xff09;使用seaborn绘制组合图形。... 5 5&#xff09;使用Boken绘制多个三角形…

63.ThreadLocal原理

JDK8中ThreadLocal的设计 每个Thread维护一个ThreadLocalMap,这个map的key是ThreadLocal实例本身,value才是真正要存储的值Object。 Thread -> ThreadLocalMap -> <ThreadLocal实例对象, 变量副本> jdk早期设计 ThreadLocal -> ThreadLocalMap -> <T…

vmware安装debian11

安装vmware16 下载镜像 https://repo.huaweicloud.com/debian-cd/ https://repo.huaweicloud.com/debian-cd/11.7.0/amd64/iso-dvd/ 安装 安装完成之后重启&#xff0c;输入账号密码进入&#xff0c;安装ssh服务器即可使用

vue使用命令随笔

###环境 node -v 获取nodejs版本 npm -v 获取npm版本 python --version或者python3 --version 查看python版本 npm cache clean --force 清除npm缓存并尝试重新安包 npm cache verify 用于验证和清理 npm 缓存 npm install -g cnpm --registryhttps://registry.npm.taobao.or…

ManicTime(屏幕时间统计工具) 专业版值得购买吗

ManicTime 是 Windows 平台上&#xff0c;一款支持跟踪、标记用户在每个软件上所花时间的工具&#xff0c;它能自动归类生成时间使用报表&#xff0c;帮助用户分析及改善工作效率。 ManicTime 不仅会在后台记录、统计所有窗口的使用时间&#xff0c;还能自动截图存档到本地&a…

西安电子科技大学 本科阶段的网络工程专业, 所有学科

西安电子科技大学本科阶段的网络工程专业作为一门综合性较强的学科&#xff0c;融合了计算机技术、通信技术和工程技术&#xff0c;旨在培养国家信息化建设所需的高级网络工程技术人才。以下是该专业学生在本科阶段可能学习的部分核心学科和课程&#xff1a; 基础理论课程&…

设计模式 - 原型模式,就该这样学!

目录 开始 为什么要引入原型模式 原型模式概述 原型模式代码实现&#xff08;浅拷贝&#xff09; 浅拷贝和深拷贝的区别 原型模式代码实现&#xff08;深拷贝&#xff09; 方式一&#xff1a;直接 copy 方式二&#xff1a;序列化和反序列化&#xff08;推荐&#xff09…

单片机考研复试面试题参考

一、解释什么是中断嵌套&#xff1f; 是指中断系统正在执行一个中断服务时&#xff0c;有另一个优先级更高的中断提出中断请求&#xff0c;这时会暂时终止当前正在执行的级别较低的中断源的服务程序&#xff0c;去处理级别更高的中断源&#xff0c;待处理完毕&#xff0c;再返…

LeetCode 1527, 54,114

目录 1527. 患某种疾病的患者题目链接表要求知识点思路代码 54. 螺旋矩阵题目链接标签思路代码 114. 二叉树展开为链表题目链接标签前序遍历思路代码 前驱思路代码 1527. 患某种疾病的患者 题目链接 1527. 患某种疾病的患者 表 表Patients的字段为patient_id、patient_name…

java项目中与金额有关的计算注意事项

java项目中与金额有关的计算注意事项 前言&#xff1a; 在项目中&#xff0c;财务相关的数据计算可能会通过项目进行各种计算以及存库&#xff0c;本篇讲述这个过程中的注意事项。 1.浮点型的误差 浮点型由于其定义的原因&#xff0c;在使用的时候总会存在误差&#xff0c;以下…

C++ | Leetcode C++题解之第205题同构字符串

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isIsomorphic(string s, string t) {unordered_map<char, char> s2t;unordered_map<char, char> t2s;int len s.length();for (int i 0; i < len; i) {char x s[i], y t[i];if ((s2t.coun…

Webpack: 7 款常用的性能分析工具

概述 Webpack 最大的优势在于它的功能非常强大、全面&#xff0c;加之繁荣活跃的组件生态&#xff0c;已经足够应对几乎所有 Web 构建需求&#xff0c;包括&#xff1a;SPA、MPA、SSR、桌面应用、Node 程序、WebAssemsbly、PWA、微前端等等&#xff0c;所以即使在近几年工程化…