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

为什么从shell脚本运行的进程的父id为1

从shell脚本运行的进程的父id为1,是因为当一个进程被shell脚本启动时,shell脚本本身会成为这个进程的父进程。而在Linux系统中,进程的父进程id(Parent Process ID,简称PPID)为1的进程是init进程,它是系统启动过程中由内核创建的第一个用户空间进程。

为什么shell脚本运行的进程的父id为1有以下几个原因:

  1. 创建新进程:当shell脚本启动时,会通过系统调用fork()创建一个新的进程。这个新进程的父进程id会被设置为shell脚本所在的进程id。
  2. 进程继承关系:新创建的进程会继承父进程的很多属性,包括父进程id。因此,当shell脚本启动新的进程时,这个新进程会继承父进程id为1的init进程作为其父进程。
  3. 进程管理:init进程(即父进程id为1的进程)是系统中所有进程的祖先进程,它负责管理和监控所有进程的运行。当shell脚本启动新的进程时,这个新进程的父进程id被设置为1,以确保系统进程管理机制的正常运行。

虽然我们不能提及特定的云计算品牌商,但是可以提供一些腾讯云相关产品来支持shell脚本在云环境中的应用:

  • 云服务器(CVM):腾讯云提供的弹性云服务器实例,可以运行shell脚本以创建和管理进程。详情请参考:云服务器
  • 云函数(SCF):腾讯云提供的无服务器计算服务,可以运行事件驱动的shell脚本函数。详情请参考:云函数
  • 容器服务(TKE):腾讯云提供的容器化部署和管理平台,可以在容器中运行包含shell脚本的应用。详情请参考:容器服务

以上仅为示例,腾讯云还提供许多其他产品和服务,可根据具体需求选择适合的产品。

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

相关·内容

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,你在终端随意

4K10
  • 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,你在终端随意

    1.1K10

    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.5K20

    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)这种形式就是不要传参了。

    2.6K50

    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.8K20

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

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

    1.4K60

    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.2K21

    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

    【Linux进程控制】二、进程控制——fork()系统调用深度刨析

    我们已经知道,fork()系统调用特点是一次调用两次返回,并且子进程创建是对进程复制,那么是哪复制开始复制呢,我们根据程序运行结果分析,程序只打印了一次begin语句,说明不是从头开始复制...而子进程打印进程ID1进程打印自己ID是5270,这是因为在子进程结束前,进程就已经结束了,新建进程变成了孤儿进程,所以它会被1进程收养,所以新建子进程进程ID1,这也是为什么第二个...printf()语句是在shell下执行原因,因为原来进程结束了,所以回到了shell进程下,此时子进程还没有结束,它被1进程接管,继续执行后面的语句,直到结束。...(实际上,这里3397进程就是我们shell进程shell进程是我们自己启动进程进程;而1进程则是init进程,init进程是Linux下最原始进程,是所有进程最终进程。)...也就是 bash shell 进程 通过kill杀死进程,可以看到子进程1进程接管 1进程就是init进程 3.

    39210

    在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.5K10

    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.9K30

    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继承环境。

    1K10

    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
    领券