首页 > 系统相关 >Cygwin、MSYS2 Bash封装函数restart,重启Windows程序进程向导,输入序号一键重启对应进程或软件

Cygwin、MSYS2 Bash封装函数restart,重启Windows程序进程向导,输入序号一键重启对应进程或软件

时间:2023-04-29 16:11:39浏览次数:49  
标签:MSYS2 浏览器 重启 exe && 进程 restart

概述

作用:终端输入restart,根据菜单提示输入序号重启特定的软件或进程,定义的重启函数太多不便于记忆的情况,特别是手机远程终端(如:JuiceSSH)连接的情况下,减少手动输入和误操作,其中判定浏览器进程使用了另一篇文章中预定的函数wmicps,ps2为指向wmicps的alias ( 详见:https://www.cnblogs.com/cnhack/p/15937835.html ),

restart函数封装代码

restart() {
	#智能判断当前系统各进程运行状态,交互式提示用户选择要重启的软件或进程!
	#注:传递参数或管道数据可以转化为非交互式操作!
	#1、可通过$*传递序号来直接选择操作;
	#	eg:restart 1 6 7   或   restart restart-chrome  1 6 7  ($1为非数字参数时绕过浏览器进程检测)
	#2、可通过标准输出管道传递序号来选择操作;
	#	eg:restart <<<"1"  或   restart <<<"1 6 7"    (可传递多个序号批量执行)
	#3、【案例】:不管当前运行哪一个浏览器,自动检测并重启浏览器:
	#   eg:restart 1 或  restart <<<1
	#exec 6>&1 1>&-
	local browserAction=""
	declare -a selectAction  #定义数组存储多个要执行的动作
	
	#指定了$1参数,且$1为非数字选项时,认定$1为要执行的浏览器重启动作(此时不再动态检测浏览器运行清空,较为节省时间)
	if [ ! -z "$1" ] && ! expr "$1" + 0 &>/dev/null;then
		browserAction="$1"
		shift
	else
		local browser=$(ps2 360ChromeX.exe --nopath &>/dev/null && echo "360ChromeX.exe 360极速浏览器X版 restart-360chromex" && exit \
			||ps2 chrome.exe --nopath &>/dev/null && echo "chrome.exe 谷歌或Cent浏览器 restart-chrome" && exit \
			||ps2 360chrome.exe --nopath &>/dev/null && echo "360chrome.exe 360极速浏览器(旧版) restart-360chrome" && exit \
			||ps2 SogouExplorer.exe --nopath &>/dev/null && echo "SogouExplorer.exe 搜狗浏览器 restart-sogouexplorer" && exit \
			||echo "None 没有浏览器在运行" >/dev/null)   #<--判断当前系统哪一款浏览器在运行?
		#exec 1>&6 6>&-
		#echo "运行的浏览器:$browser"  ##<---Test Get Dynamic WebBrowser
		[ ! -z "$browser" ] && browserAction=$(echo "$browser"|awk '{print $NF;exit}')
	fi
	local actionList=$(cat <<EOF
${browserAction}
restart-sunlogin
restart-interactive-sshd
restart-cygwin-sshd
restart-explorer
restart-winmedia
restart-winshare
restart-graphics
restart-mysqld
restart-httpd
restart-phpfpm
restart-msedge
restart-excel
restart-zerotier
restart-tailscale
restart-tplink
restart-wcc
restart-winaudio
restart-proxifier
restart-all-frpc
restart-allone
EOF
)
	print_color 40 "交互式重启程序向导:"
	echo "$actionList"|awk '{printf "%2d):%s\n",NR,$0}'
	if [ $# -gt 0 -a -t 0 ];then #有数字序号,同时没有管道数据传入时;
		restart "$browserAction" <<<"$@"
		return
	fi
	while :;
	do
		print_color 40 "请输入序号选择要执行操作,支持多选,多个序号用空格隔开(0 或 q 退出操作):"
		read -p "> " doSelect
		if [[ "${doSelect,,}" == "0" || "${doSelect,,}" == "q" ]];then
			print_color 40 "用户取消,退出操作..."
			break
		elif [ -z "$doSelect" ];then
			print_color 40 "选择为空,退出操作..."
			break
		else
			mapfile -t -d $' ' selectArr <<<$(echo "$doSelect")
			for selectItem in ${selectArr[@]}
			do
				local _action=$(echo "$actionList"|awk 'NR=='"${selectItem}"'{print;exit}' 2>/dev/null)
				if [ -z "$_action" ];then
					print_color 40 "选项 “${selectItem}” 无效,请重新选择!" 
					selectAction=()  #如果有选错的选项,清空已存储的动作列表,让用户重新选择
					break  
				else
					selectAction[${#selectAction[@]}]="$_action"
				fi
			done
			[ ${#selectAction[@]} -gt 0 ] && break
		fi
	done
	[ -z "${selectAction[*]}" ] && return
	for doAction in "${selectAction[@]}"
	do
		echo "执行的操作:=> $doAction ..."
		#eval "$doAction"   #使用此方式重复运行函数时会导致参数堆积,导致重启过程执行两次,比如重复多次运行 `restart2`输入1,多次重复此步骤即可重现Bug!
		( eval "$doAction" )  #使用子进程执行重启命令,防止反复运行函数时导致的参数堆积!
	done
}
alias restart2='restart restart-chrome'  #认定运行的浏览器为谷歌或Cent浏览器,不再动态检测

使用说明

直接终端使用 restart 命令即可,根据菜单提示输入相应序号重启软件进程,缺省参数下,程序会检测当前系统运行哪一款浏览器从而决定第一个选项是啥,$1也可以指定预定义的函数来跳过浏览器进程检测(此时的$1不为纯数字);
$1或$2(存在$1且为约定义函数时,使用$2作为选择序号)可传递纯数字来替代手动输入序号的过程,将操作过程转成非交互式进行(适用于自动化脚本,不需要用户交互的情况)。

使用截图

其他相关参考资料:

Cygwin/WSL专用函数wmicps:借助Windows WMIC组件从命令行获取某进程的命令行参数及其关联信息
Cygwin/WSL专用Shell函数,restart-ps:带命令行参数重启某进程

标签:MSYS2,浏览器,重启,exe,&&,进程,restart
From: https://www.cnblogs.com/cnhack/p/17364119.html

相关文章

  • 14 进程调度
    进程调度的原因:一是CPU同一时刻只能运行一个进程,并且CPU的个数总是少于进程个数,就需要让进程共用一个CPU;二是当一个进程拿不到资源时就应该让出CPU,否则会一直霸占CPU;1、管理进程:进程的生命周期:进程的状态:运行、睡眠、等待、新建、僵死;组织进程:设计思想:链表数据结构,一个优......
  • 【协程】进程,线程和协程
    进程进程,描述的是程序的执行过程,是运行着程序的代表,在操作系统中,每个进程的内存空间都是独立的,使用多进程并发有两个缺点:一是内核的管理成本高,而是无法简单地通过内存同步数据(进程运行的虚拟内存空间),很不方便,于是多线程模式就出现了。线程线程是操作系统能够运行运算调度的最......
  • XMake学习笔记(1):Windows(MSYS2)下MinGW-w64环境搭建和XMake安装
    以前写的C++基本都是CwithSTL,大多是面向过程的算法题,或者比较小的项目,然后经常报各种编译错误(对编译原理不熟),经常把人搞到崩溃,搞不懂构建、链接之类的东西。现在开始记录一下XMake的学习笔记,记录一些学习过程中踩的坑,在这篇文章,你将学习到Windows下利用MSYS2进行Mingw-w64环境搭......
  • XMake学习笔记(1):Windows(MSYS2)下MinGW-w64环境搭建和XMake安装
    以前写的C++基本都是CwithSTL,大多是面向过程的算法题,或者比较小的项目,然后经常报各种编译错误(对编译原理不熟),经常把人搞到崩溃,搞不懂构建、链接之类的东西。现在开始记录一下XMake的学习笔记,记录一些学习过程中踩的坑,在这篇文章,你将学习到Windows下利用MSYS2进行Mingw-w64环境......
  • 13 进程
    进程:从进程的结构看:进程是一个应用程序运行时刻的实例;从进程的功能看:进程是应用程序运行时所需资源的容器;从操作系统对进程的实现角度看:进程是一堆数据结构;进程的结构:进程必须要有一个地址空间:这个地址空间包括至少两部分:一部分是内核,一部分是用户的应用程序;每个进程拥有x86......
  • 进程间通信
    匿名管道/*匿名管道用在具有关系的进程间,原因是共享文件描述符环形队列,双指针-读指针、写指针管道中没有数据,read将会被堵塞管道写满时,write将会被堵塞创建匿名管道#include<unistd.h>int......
  • Python3多进程共享变量实现方法
    今天同事反映一个问题让帮忙看一下:多进程共用一个变量,在一个进程中修改后,在另外的进程中并没有产生修改。 一、错误的实现方式最初以为是没添加global声明导致修改未生效,但实际操作发现global方式在多进程中也只能读不能写。错误示例代码如下:importmultiprocessing#声......
  • 端口进程查看相关linux命令
    硬盘使用情况df-lh查看内存占用free-mhcat/proc/meminfoMem:内存的使用信息Swap:交换空间的使用信息total:总计物理内存的大小。used:已使用物理内存。free:可用物理内存。shared:多个进程共享的内存总额。buffers/cached:缓存缓冲使用物理内存大小。availabl......
  • 进程与线程
    进程和线程都是操作系统中的概念,它们是操作系统调度和管理计算机资源的基本单位。进程(Process)是指正在运行中的程序,它是系统资源分配和调度的基本单位。一个进程可以包含多个线程,每个线程都运行在同一个进程的上下文中,共享该进程的内存空间、文件等系统资源。操作系统通过进程间......
  • 进程和线程
    多线程的内容很重要;为了面试,时间不充裕就背,学习最重要没必要求大求全,把握核心和重点就OK;效率最高时间充裕除了背,需要慢慢自己做实现去理解;从大厂的一则招聘谈起:Java基础扎实,熟悉JVM、多线程、集合等基础,熟悉分布式、缓存、消息、搜索等机制三年以上Java开发经验,熟悉Spring......