当前位置: 首页 > news >正文

Shell脚本学习-$$特殊变量

$$特殊变量:

获取脚本执行的进程号(PID)。

[root@vm1 scripts]# cat test_pid.sh
echo $$ > /tmp/a.pid
sleep 300

代码说明:

1)获取$$值,也就是当前脚本进程的PID值,重定向到/tmp/a.pid文件中。

2)休息300秒,模拟守护进程不退出。

[root@vm1 scripts]# sh test_pid.sh &
[1] 10638
[root@vm1 scripts]# ps -ef |grep test_pid|grep -v grep
root      10638   5135  0 04:51 pts/0    00:00:00 sh test_pid.sh
[root@vm1 scripts]# cat /tmp/a.pid
10638

代码说明:

1)然后我们在后台运行脚本,&符号表示在后台运行脚本。

2)然后我们使用ps命令查看进程号,位10638。

3)然后我们检查/tmp/a.pid文件,看其中的内容就是进程号。

生产环境案例:

实现系统中多次执行一个脚本后的进程只有一个。$$特殊变量的企业级应用。

说明:有时执行定时任务脚本的频率比较快,并不知道上一个脚本是否真的执行完毕。但是业务要求同一时刻只能有一个同样的脚本在运行。此时可以利用$$获取上一次运行的脚本进程号,当程序重新运行时候,根据获得的进程号,清理掉上一次的进程,运行新的脚本命令。

[root@vm1 scripts]# cat pid.sh
#!/bin/bash
pidpath=/tmp/a.pid
if [ -f "$pidpath" ];thenkill `cat $pidpath` >/dev/null 2>&1rm -f $pidpath
fi
echo $$ > $pidpath
sleep 300

说明:

1)使用-f "$pidpath"语句是判断 $pidpath变量的文件是否存在,存在说明有脚本进行在运行。

2)杀掉与前一个进程号对应的进程。将显示信息和错误信息都放到/dev/null黑洞文件中。

2)使用rm -f $pidpath语句删除掉pid文件。

3)然后再将当前的进程号重定向到/tmp/a.pid文件中。

4)休息300秒。

我们再进行下测试:

[root@vm1 scripts]# ps -ef |grep pid.sh |grep -v grep
[root@vm1 scripts]# sh pid.sh &
[1] 26178
[root@vm1 scripts]# ps -ef |grep pid.sh |grep -v grep
root      26178   5135  0 05:10 pts/0    00:00:00 sh pid.sh
[root@vm1 scripts]# sh pid.sh &
[2] 26362
[root@vm1 scripts]# ps -ef |grep pid.sh |grep -v grep
root      26362   5135  0 05:10 pts/0    00:00:00 sh pid.sh
[1]-  Terminated              sh pid.sh
[root@vm1 scripts]# sh pid.sh &
[3] 26659
[root@vm1 scripts]# sh pid.sh &
[4] 26663
[2]   Terminated              sh pid.sh
[root@vm1 scripts]# ps -ef |grep pid.sh |grep -v grep
root      26663   5135  0 05:10 pts/0    00:00:00 sh pid.sh
[3]-  Terminated              sh pid.sh

脚本用于执行启动或定时任务时,相同的脚本只能有一个在运行,当新脚本运行时,必须关闭未运行完或未退出的上一次同名的脚本进程。

相关文章:

Shell脚本学习-$$特殊变量

$$特殊变量: 获取脚本执行的进程号(PID)。 [rootvm1 scripts]# cat test_pid.sh echo $$ > /tmp/a.pid sleep 300代码说明: 1)获取$$值,也就是当前脚本进程的PID值,重定向到/tmp/a.pid文件…...

vscode中python插件过新导致无法正常debug问题解决安装vscode以前版本python插件教程

您需要从.vsix文件安装它。您可以在此处找到它们。 下载所需.vsix版本的文件。您可能需要单击assets才能看到它们。 然后打开 VSCode,转到extensions-> 单击三个点 ->install from vsix并选择您的文件。 重启以后,就可以正常debug了!...

chrome macos编译

下载工具包 git clone https://chromium.googlesource.com/chromium/tools/depot_tools/gitpwd export PATH"$PATH:/Users/lichengjun/Downloads/chrome_build/depot_tools" mkdir chromium cd chromium 如果想快的话直接: fetch --nohooks --no-history chromium (…...

Linux环境下Elasticsearch相关软件安装

Linux环境下Elasticsearch相关软件安装 本文将介绍在linux(Centos7)环境下安装Elasticsearch相关的软件。 1、安装Elasticsearch 1.1 Elasticsearch下载 首先去Elasticsearch官网下载相应版本的安装包,下载之后传输到linux服务器上。 官网地址:http…...

【趟坑记录】d3.zoom()的正确使用姿势 @d3.v7

【趟坑记录】d3.zoom()的正确使用姿势 d3.v7 文章目录 【趟坑记录】d3.zoom()的正确使用姿势 d3.v7问题重现原因分析解决方案放缩平移写法特殊修改transform函数的写法 总结 在开发一个D3应用的时候遇到了一个 zoom相关的问题,记录解决思路与方案 问题重现 最近在…...

基于 Docker + Nginx + Gitlab-runner 实现前端自动化部署流程

本篇会用到Docker,Gitlab-runner等相关工具,如果对其不是特别了解,可以参考下相关文档: GitLab RunnerDocker 快速入门CI/CD:持续集成/持续部署 在早期部署前端项目时,我们通常会通过ftp把前端代码直接传…...

make/makefile的使用

make/makefile 文章目录 make/makefile初步认识makefile的工作流程依赖关系和依赖方法make的使用 总结 make是一个命令,是一个解释makefile中指令的命令工具,makefile是一个文件,当前目录下的文件,两者搭配使用,完成项…...

Flutter中Navigator 跳转传参数和反向传参数

初始化路由 MaterialApp(routes: <String, WidgetBuilder>{"/Second": (BuildContext context){return Second("");}}, 跳转传参数 String va await Navigator.of(context).push(MaterialPageRoute(builder: (content) {return Second( demo); },…...

kettle开发-Day40-AI分流之case/switch

前言&#xff1a; 前面我们讲到了很多关于数据流的AI方面的介绍&#xff0c;包括自定义组件和算力提升这块的&#xff0c;今天我们来学习一个关于kettle数据分流处理非常重要的组件Switch / Case 。当我们的数据来源于类似日志、csv文件等半结构化数据时&#xff0c;我们需要在…...

MySQL下载与安装

MySQL下载与安装 一、下载 地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 当前最新是8.0版本&#xff0c;我选择上一个最新的mysql-5.7.24-winx64.zip 二、安装 MySQL安装文件分两种 .msi和.zip &#xff0c;.msi需要安装 zip格式是自己解压&#xff0c;解压缩之后…...

c++基础2

文件操作 程序运行时产生的数据属于临时数据&#xff0c;程序一旦运行结束都会被释放 通过文件可以将数据持久化 c中对文件操作需要包含 文件类型分为两种 文本文件&#xff1a;文件以ASCII码形式存储在计算机中二进制文件&#xff1a;文件以文本的二进制存储在计算机中&a…...

虚拟机VMware,linux,centos,如何将项目部署到服务器上面

vmware 是安装虚拟机的软件&#xff0c;centos是系统&#xff0c;linux是系统内核 将本地项目上线到服务器上面&#xff0c;如何实现呢&#xff1f; 准备好服务器&#xff0c;可以选择阿里云服务器 首先需要搭建环境&#xff0c;运行的主要环境是jdktomcatmysql; 通过远程连接…...

R语言 BPNN 反向传播神经网络

##BPNN-neuronet set.seed(123) folds <- createFolds(y=data$Groups,k=10) 建一个放auc值的空向量 auc<-as.numeric() Errorrate<-as.numeric() accuracy<-as.numeric() sensitivity<-as.numeric() specificity<-as.numeric() roc <- vector("li…...

回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 ![6 基本介绍 1.MATLAB实现TCN-BiGRU时间卷积双向门控循…...

Qt使用QPixmap类和QScreen类来实现简单截图功能

在Qt中&#xff0c;可以使用QPixmap类和QScreen类来实现截图功能。 以下是一个简单的示例代码&#xff0c;演示了如何在Qt中进行截图&#xff1a; #include <QtWidgets>void captureScreen() {// 获取屏幕对象QScreen *screen QGuiApplication::primaryScreen();// 截…...

【【51单片机LCD1602模块介绍】】

LCD1602的介绍 显示容量16x2 每个字符是5x7的点阵 VDD 是电源正极 4.5-5.5v VO 是对比度调节电压 RS 数据/指令 选择 1为数据0为指令 RW 读写选择1是读 0为写 E 使能 1为数据有效 下降沿执行命令 D0-D7 数据输入输出 A 背光电源正极 K 背光电源负极 LCD1602的操作流程 1.初始…...

【Nginx11】Nginx学习:HTTP核心模块(八)文件处理

Nginx学习&#xff1a;HTTP核心模块&#xff08;八&#xff09;文件处理 继续我们的 HTTP 核心模块之旅。今天主要是文件相关的一些处理操作&#xff0c;包括 DirectIO、文件缓存以及 sendfile 相关的配置。这三个配置中&#xff0c;大家应该会见过 sendfile &#xff0c;但是另…...

STM32MP157驱动开发——按键驱动(休眠与唤醒)

文章目录 “休眠-唤醒”机制&#xff1a;APP执行过程内核函数休眠函数唤醒函数 休眠与唤醒方式的按键驱动程序(stm32mp157)驱动程序框架button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “休眠-唤醒”机制&#xff1a; 当应用程序必须等待某个事件发生&#xff0c…...

全面解析 SOCKS5 代理与 HTTP 代理的对比与应用

一、 SOCKS5 代理与 HTTP 代理的基本原理 SOCKS5 代理&#xff1a;SOCKS5 是一种网络协议&#xff0c;它可以在传输层&#xff08;Transport Layer&#xff09;代理 TCP 和 UDP 请求。SOCKS5 代理不解析请求内容&#xff0c;而是直接将数据中转至目标服务器&#xff0c;支持更广…...

STM32 HEX文件和BIN文件格式区别keil中的配置与生成

一、区别 HEX 文件: 是包括地址信息的,在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。HEX文件是用ASCII来表示二进制的数值。例如一般8-BIT的二进制数值0x3F,用ASCII来表示就需要分别表示字符3和字符F,每个字符需要一个BYTE…...

ESP32-S3项目实战:从Github下载‘小智’代码到成功烧录的完整避坑记录

ESP32-S3项目实战&#xff1a;从Github下载‘小智’代码到成功烧录的完整避坑记录 在物联网开发领域&#xff0c;ESP32-S3凭借其出色的性能和丰富的外设接口&#xff0c;成为众多开发者的首选。本文将带你完整走一遍从Github获取"小智"开源项目到最终烧录运行的整个流…...

如何用ULTIMATE ANIMATION COLLECTION打造3A级游戏动画效果?Unity 2022实战案例解析

如何用ULTIMATE ANIMATION COLLECTION打造3A级游戏动画效果&#xff1f;Unity 2022实战案例解析 在游戏开发领域&#xff0c;动画质量往往是区分平庸作品与精品的关键分水岭。当玩家控制角色挥剑时剑刃的轨迹是否流畅自然&#xff0c;角色与环境互动时是否呈现真实的物理反馈&a…...

oicq 高级技巧:如何构建企业级 QQ 机器人应用架构

oicq 高级技巧&#xff1a;如何构建企业级 QQ 机器人应用架构 【免费下载链接】oicq Tencent QQ Bot Library for Node.js 项目地址: https://gitcode.com/gh_mirrors/oi/oicq oicq 是一个基于 Node.js 的 QQ 协议库&#xff0c;专为构建稳定、高效的 QQ 机器人应用而设…...

Redis哨兵模式内存缩容

Redis哨兵模式内存缩容检查节点信息从节点内存缩容最大内存配置修改停机缩容缩容后检查主节点内存缩容回退操作检查节点信息 通过哨兵获取集群名和主节点地址&#xff1a; # docker exec -it pod_sentinel_1 redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:…...

2026行李箱推荐别乱买!唯尊、海澜之家、森马、外交官、珉璐保罗五款横评

对于技术从业者而言&#xff0c;行李箱不仅是装载衣物的容器&#xff0c;更是保护精密电子设备、应对高频差旅与跨城迁移的可靠装备。无论是前往异地调试系统、参加技术峰会&#xff0c;还是举家搬迁&#xff0c;一个设计合理、性能可靠的行李箱能显著提升出行效率与体验。本文…...

掌控你的数字记忆:WeChatMsg让微信聊天记录永久保存无忧

掌控你的数字记忆&#xff1a;WeChatMsg让微信聊天记录永久保存无忧 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeC…...

Onekey:智能Steam清单配置工具,让游戏管理效率提升10倍

Onekey&#xff1a;智能Steam清单配置工具&#xff0c;让游戏管理效率提升10倍 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为Steam游戏清单配置焦头烂额&#xff1f;从查找App ID到解析…...

Windows 11系统臃肿卡顿?Win11Debloat高效优化工具让系统重获新生

Windows 11系统臃肿卡顿&#xff1f;Win11Debloat高效优化工具让系统重获新生 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declu…...

【Python并发成本控制终极指南】:GIL移除后3大无锁模型选型公式与ROI量化对比表

第一章&#xff1a;Python无锁GIL环境下的并发成本控制全景图Python 的全局解释器锁&#xff08;GIL&#xff09;长期被视为多线程 CPU 密集型任务的性能瓶颈。然而&#xff0c;随着 CPython 3.13 引入实验性无锁 GIL&#xff08;--without-pymalloc 配合 --with-experimental-…...

FramePack完整指南:5个关键技巧解决AI视频生成难题

FramePack完整指南&#xff1a;5个关键技巧解决AI视频生成难题 【免费下载链接】FramePack Lets make video diffusion practical! 项目地址: https://gitcode.com/gh_mirrors/fr/FramePack 你是否曾为AI视频生成中的内存溢出、生成速度缓慢和画面漂移问题而烦恼&#x…...