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

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

这是一个有趣现象,catalina.sh start方式启动tomcat会把java进程挂到init(进程id1)进程下,已经与当前test.sh进程脱离了父子关系,也与ssh进程没有关系,为什么关闭...我们推测是ssh窗口在关闭时,对当前交互shell以及正在运行test.sh等子进程发送某个退出Signal,找了一台装有systemtap机器来验证,所用stap脚本涧泉同学那里copy.../bin/sh sleep 4400 & echo "shell exit" 运行a.sh脚本之后,sleep 4400进程pid与pgid是不同,pgid是其父进程id,即已经退出了a.sh...交互模式与非交互模式对作业控制(job control)默认方式不同 为什么在交互模式下shell不会对后台进程处理SIGINT信号设置忽略,而非交互模式下会设置忽略呢?...因为默认如果采用进程进程ID进程会把收到键盘事件比如ctrl-c之类SIGINT传播给进程组中每个成员,假设后台进程也是进程成员,因为作业控制需要不能忽略SIGINT,你在终端随意

3.9K10
您找到你想要的搜索结果了吗?
是的
没有找到

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

这是一个有趣现象,catalina.sh start方式启动tomcat会把java进程挂到init(进程id1)进程下,已经与当前test.sh进程脱离了父子关系,也与ssh进程没有关系,为什么关闭...我们推测是ssh窗口在关闭时,对当前交互shell以及正在运行test.sh等子进程发送某个退出Signal,找了一台装有systemtap机器来验证,所用stap脚本涧泉同学那里copy.../bin/sh sleep 4400 & echo "shell exit" 运行a.sh脚本之后,sleep 4400进程pid与pgid是不同,pgid是其父进程id,即已经退出了a.sh...交互模式与非交互模式对作业控制(job control)默认方式不同 为什么在交互模式下shell不会对后台进程处理SIGINT信号设置忽略,而非交互模式下会设置忽略呢?...因为默认如果采用进程进程ID进程会把收到键盘事件比如ctrl-c之类SIGINT传播给进程组中每个成员,假设后台进程也是进程成员,因为作业控制需要不能忽略SIGINT,你在终端随意

91910

Shell:子shell概念

Shell本质可以理解Shell进程,子进程概念是由进程概念引申而来,在Linux系统中,系统运行应用程序几乎都是init(pid1进程进程派生而来,所有这些应用程序都可以视为...Shell脚本是从上至下、左至右依次执行每一行命令及语句,即执行完一个命令之后再执行下一个。...如果在Shell脚本中遇到子脚本(即脚本嵌套),就会先执行子脚本内容,完成后再返回脚本继续执行脚本内后续命令及语句。...子shell分类 大致分为两类: sub shell:通过进程替换(cmd)、命令替换 child shell:通过以可执行文件方式运行shell脚本或直接在当前shell中启动shell...注释:使用 fork() 函数可以创建一个子进程;除了 PID(进程ID)等极少参数不同外,子进程一切都来自进程,包括代码、数据、堆栈、打开文件等,就连代码执行位置(状态)都是一样

1.3K30

Shell 脚本中调用另一个 Shell 脚本三种方式

运行时候 terminal 会新开一个子 Shell 执行脚本 foo.sh,子 Shell 执行时候, Shell 还在。子 Shell 执行完毕后返回 Shell。...echo -e "In 2.sh: variable A=$A\n" 注:这两个脚本参数 $$ 用于返回脚本 PID , 也就是进程 ID。...fork fork 方式可以看出,两个脚本都执行了,运行顺序1-2-1两者PID值(1.sh PID=82266, 2.sh PID=82267),可以看出,两个脚本是分成两个进程运行。...exec exec 方式运行结果是,2.sh 执行完成后,不再回到 1.sh。运行顺序 1-2。pid值看,两者是在同一进程 PID=82287 中运行。 source ?...source source方式结果是两者在同一进程运行。该方式相当于把两个脚本先合并再运行

4.3K20

进程组、会话、控制终端概念,如何创建守护进程

生命周期: 守护进程会长时间运行,常常在系统启动时就开始运行,直到系统关闭时才终止。 守护进程不依赖于终端 终端开始运行进程都会依附于这个终端,这个终端称为这些进程控制终端。...; • 终端进程ID-1(TPGID表示终端进程ID,该值表示与控制终端相关前台进程组,如果未和任何终端相关,其值-1; • 所有的守护进程进程: 历史上,Linux 启动一直采用init...当在shell运行一行命令后(不带&)创建一个新进程组,命令行中如果有多个命令会创建多个进程,这些进程都处于该新建进程组中,shell将该新建进程组设置前台进程组并将自己暂时设置后台进程组。...关闭文件描述符 复制代码 1.创建子进程进程退出 由于守护进程是脱离控制终端,因此,完成第一步后就会在shell终端里造成一程序已经运行完毕假象。.../run UID0; • 没有控制终端(TTY?); • 终端进程ID-1; • 守护进程进程1516,即systemd。 作者:一口Linux

1.4K20

c语言main函数里参数argv和argc解析

main函数返回给谁 01函数为什么需要返回值 函数在设计时候设计了参数和返回值,参数是函数输入,返回值是函数输出。 因为函数需要对外输出数据(实际上是函数运行一些结果值),因此需要返回值。...03Linux下一个程序执行本质 (1)表面来看,Linux中在命令行中去./xx去执行一个可执行程序。 (2)我们可以通过shell脚本来调用执行一个程序(下面会写一个shell脚本)。...return 0;   } 然后我再创建一个shell脚本shell脚本里面的内容:   #!...执行结果: 说明:Linux  shell中用$?这个符号来存储和表示上一个程序执行结果(这里就是./a.out)。#!/bin/sh这个书写shell脚本格式。...03为什么要给main函数传参 (1)首先,main函数不传参是可以,也就是说进程调用子进程并且给子进程传参不是必须;int main(void)这种形式就是不要传参了。

1.5K50

CentOS中环境变量和配置文件

即允许在内存中存储数据,使得在程序或shell运行脚本能够访问它们。...该进程创建shell无法读取shell局部变量。 [root@dev shell]# sh a.sh 2 22 2 [root@dev shell]# cat a.sh #!...一个使用场景是:多个执行脚本依赖于共同环境配置,这个配置写在一个env.sh脚本里,如何使其他执行脚本可以读取到env.sh里变量?在子shell中export变量,并不能影响到shell。...source命令( C Shell 而来)是bash shell内置命令。点命令,就是一个点符号,(Bourne Shell而来)是source另一名称。...这两个命令都以一个脚本参数,该脚本将作为当前shell环境执行,即不会启动一个新进程。所有在脚本中设置变量将成为当前Shell一部分。

1.7K20

shell脚本export变量只限脚本内么_shell脚本调用oracle存储过程

---- ---- 这个问题涉及了三个知识点: 变量(环境变量、自定义变量) 进程与子进程 脚本执行方式 什么是变量?变量分类? 1. 环境变量 全局变量,可被子进程继承 2....子进程仅继承进程环境变量,子进程不会继承进程自定义变量 可使用如下命令将自定义变量转换为环境变量: export 变量名称 为什么进程环境变量数据可被子进程引用?...此时,系统中将有两个shell,一个是登录时系统启动shell,另一个是系统运行脚本程序创建shell。当一个脚本程序运行完毕,它脚本shell将终止,可以返回到执行该脚本之前shell。...如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义变量只是该脚本程序内一个局部变量,其他shell不能引用它,要使某个变量值可以在其他shell(子shell)中被使用,...sh执行脚本时,linux将创建子shell进程进行脚本执行,脚本执行结束后,在当前shell进程)必然无法查看已经消失进程环境变量。

1.3K60

CentOS中环境变量与配置文件深入讲解

即允许在内存中存储数据,使得在程序或shell运行脚本能够访问它们。...该进程创建shell无法读取shell局部变量。 [root@dev shell]# sh a.sh 2 22 2 [root@dev shell]# cat a.sh #!...一个使用场景是:多个执行脚本依赖于共同环境配置,这个配置写在一个env.sh脚本里,如何使其他执行脚本可以读取到env.sh里变量?在子shell中export变量,并不能影响到shell。...source命令( C Shell 而来)是bash shell内置命令。点命令,就是一个点符号,(Bourne Shell而来)是source另一名称。...这两个命令都以一个脚本参数,该脚本将作为当前shell环境执行,即不会启动一个新进程。所有在脚本中设置变量将成为当前Shell一部分。

2.1K21

在linux后台运行脚本方法和命令

/test.sh & 查看当前shell环境中已启动任务情况:jobs 将test.sh切换到前台运行:fg %number(”number”使用jobs命令查看到 [ ] 中数字,不是pid...这是因为以上两种方法使得test.sh在后台运行时,运行test.sh进程进程是当前shell终端进程,关闭当前shell终端时,进程退出,会发送hangup信号给所有子进程,子进程收到hangup...test.sh脚本进程 退出当前shell终端,再重新打开,使用jobs看不到正在运行test.sh,但使用ps -ef可以看到 在后台不中断运行test.sh,可以使用nohup忽略hangup...信号,或者使用setsid将其父进程改为init进程进程号为1) 不中断在后台运行test.sh另一个命令:setsid ..../test.sh & 使用ps -ef |grep test.sh可看到test.sh进程进程id1 测试脚本

3.4K10

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

tomcat启动之后,当前shell进程并没有退出,而是挂住在tail进程,往终端输出日志内容。这种情况下: 1)、如果我先直接关掉ssh窗口后,Java进程会退出,服务不可用。...这是一个有趣现象,catalina.sh start方式启动tomcat会把java进程挂到init(进程id1)进程下,已经与当前test.sh进程脱离了父子关系,也与ssh进程没有关系,为什么关闭...交互模式与非交互模式对作业控制(job control)默认方式不同: I)在交互模式下,因为作业控制需要,shell不会对后台进程处理SIGINT信号设置忽略。...因此,在交互模式下后台进程会设置一个自己进程ID。...不开启作业控制的话,脚本后台进程可以通过设置忽略SIGINT信号来避免进程对组中成员传播,因为对它来说这个信号已经没有意义。

1.4K10

nohup和setsid实现linux后台运行执行 shell 脚本

/test.sh & 查看当前shell环境中已启动任务情况:jobs 将test.sh切换到前台运行:fg %number(”number”使用jobs命令查看到 [ ] 中数字,不是pid)...中断后台运行test.sh脚本:先fg %number切换到前台,再ctrl+c;或是直接kill %number 以上两种在后台运行test.sh方法,当遇到退出当前shell终端时,后台运行...不中断后台运行脚本 这是因为以上两种方法使得test.sh在后台运行时,运行test.sh进程进程是当前shell终端进程,关闭当前shell终端时,进程退出,会发送hangup信号给所有子进程,...test.sh脚本进程 退出当前shell终端,再重新打开,使用jobs看不到正在运行test.sh,但使用ps -ef可以看到 在后台不中断运行test.sh,可以使用nohup忽略hangup信号.../test.sh & 使用ps -ef |grep test.sh可看到test.sh进程进程id1 测试脚本 #!

2.7K30

Shell特殊变量和命令行参数详解

一个由冒号分隔目录列表,shell用它来搜索命令,一个普通值 /usr/gnu/bin:/usr/local/bin:/usr/ucb:/usr/bin PPID:进程进程ID PS1:主提示符串...HOME和MAIL由login(1)设置 SHELLOPTS:包含一列开启shell选项,比如braceexpand、hashall、monitor等 UID:展开当前用户用户ID,在shell启动时初始化...报错信息可以发现shell并没有识别这是个赋值语句,而是把Barry=hello当作一个命令来执行,当然会报错。 为什么不能识别这是赋值语句呢?...5.特殊变量 $0:当前脚本文件名 $num:num1开始数字,$1是第一个参数,$2是第二个参数,${10}是第十个参数 $#:传入脚本参数个数 $*:所有的位置参数(作为单个字符串)...:后台运行最后一个进程pid $-:显示shell使用的当前选项 $_:之前命令最后一个参数

2.5K60

100个Linux命令(7)-进程管理

请不要在此纠结子 bash 和子 shell,如果搞不清楚他们关系,就当他们是同一种东西好了。 那是否可以理解所有命令、脚本运行环境都是在子shell中呢?...bash是内置命令角度来考虑,它不会进入子shell,这一点在执行bash命令后变量$BASH_SUBSHELL0可以验证出来。...事实也确实如此,shell脚本只会继承shell一项属性:进程所存储各命令路径。另外,执行shell脚本有一个动作:命令执行完毕后自动退出子shell。...最后需要说明是,子shell环境设置不会粘滞到shell环境,也就是说子shell变量等不会影响shell。 还有两种特殊脚本调用方式:exec和source。...它也不会开启子shell,直接在当前shell中执行调用脚本且执行脚本后不退出当前shell,所以脚本会继承当前已有的变量,且脚本执行完毕后加载环境变量会粘滞给当前shell,在当前shell生效。

1.7K20

Centos6系统启动加载流程

总结过程如下: 按照grub.conf中"root="指定安装根文件系统 内核执行/sbin/init程序 由于init是Linux内核执行第一个程序,因此它进程ID(PID)1....init进程起来后,系统启动控制权移交给init进程, /sbin/init进程是所有进程进程,当init起来之后,它首先会读取配置文件/etc/inittab,进行以下工作: 执行系统初始化脚本.../sbin/init进程是所有进程进程,当init起来之后,它首先会读取配置文件/etc/inittab,判断运行级别。.../etc/rc.d/init.d/中脚本是守护进程。守护进程是在后台运行并提供某种服务进程。例如,http守护进程(httpd)提供Web服务。...当shell脚本运行时,通常会出现非交互式shell。它是非交互式,因为它正在处理脚本而不是等待命令之间用户输入。对于这些shell调用,仅使用从父shell继承环境。

99410

【Linux】进程控制

另外,为什么 fork 给进程返回子进程 pid,而给子进程返回0呢?...2、进程退出情况 进程退出时一共有如下三种情景: 代码运行完毕且结果正确 – 此时退出码0; 代码运行完毕且结果不正确 – 此时退出码非0; 代码异常终止 – 此时退出码无意义。..., status); } return 0; } 我们可以通过一个监控脚本来检测子进程创建到终止到被进程回收过程: while :; do ps axj | head -1 &&...,我们就可以自己实现一个简易 shell 命令行解释器了;实现一个简易 shell 大概可以分为如下几步: 输出提示符; 终端获取命令行输入; 解析命令行输入信息; 创建子进程...,而是由 shell 进程本身内部逻辑来完成;外部命令则是通过创建子进程,然后进行进程程序替换,运行外部程序文件等方式来完成。

4K00

Linux进程管理

为了区分每一个运行程序,Linux给每个进程都做了标识,称为进程号(process ID),每个进程进程号是唯一。...使用PID区分不同进程 系统启动后第一个进程是init,它PID是1。init是唯一一个由系统内核直接运行进程。...除了init之外,每个进程都有进程(PPID标识) 每个进程还有四个与用户和组相关识别号 实际用户识别号 (real user ID,RUID) 实际组识别号 (real group...运行后台进程方法是在命令行最后加上 “&” 进程和作业区别: 进程:操作系统概念,由操作系统负责管理 作业:shell程序概念,由shell程序负责管理 一个操作系统可以启动多个shell程序,...atd服务只是myatXX文件中读取内容,真正执行命令会存放在另外一个文件,我们用at -c命令可以看到这个真正执行文件内容。 脚本放在哪个目录下?脚本需要添加可执行属性吗?

6.8K00
领券