首页
学习
活动
专区
圈层
工具
发布

为什么从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脚本的应用。详情请参考:容器服务

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

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

相关·内容

  • 【Linux课程学习】:环境变量:HOME,su与su - 的区别,让程序在哪些用户下能运行的原理,环境变量具有全局性的原因?

    7.为什么环境变量具有全局性? 因为子进程都会进程父进程的环境变量,所以子进程都能看到这些环境变量,也能进行操作。也可以传递给自己的子进程,让自己的子进程看到。...8.为什么要让子进程继承父进程的环境变量? HOME环境变量: 表示当前用户的家目录,cd ~就是回到这样的目录。 刚刚登录shell的目录,就是该用户的家目录。...让子进程不被启动: 运行一个程序,就是让-bash帮我们创建一个子进程。但是子进程不会继承父进程的本地变量,只会继承父进程的环境变量。所以我们在父进程设置一个变量,就能控制该程序能不能运行。...可以设置为要有这个环境变量才能运行,也可以设置没有这个环境变量才能运行。...2.有ISRUNNING环境变量,getenv就返回NULL,打印"程序启动失败" 为什么子进程要继承父进程的环境变量? a.系统的配置信息,尤其是具有指导性的配置信息。

    14810

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

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

    1.2K10

    在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进程的父进程id为1 测试脚本 !

    3.9K10

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

    3.5K50

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

    这是一个有趣的现象,catalina.sh start方式启动的tomcat会把java进程挂到init(进程id为1)的父进程下,已经与当前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.2K10

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

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

    1.5K60

    Linux进程管理

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

    7.1K00

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

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

    1.9K20

    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:num为从1开始的数字,$1是第一个参数,$2是第二个参数,${10}是第十个参数 $#:传入脚本的参数的个数 $*:所有的位置参数(作为单个字符串)...:后台运行的最后一个进程的pid $-:显示shell使用的当前选项 $_:之前命令的最后一个参数

    2.6K60

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

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

    这是一个有趣的现象,catalina.sh start方式启动的tomcat会把java进程挂到init(进程id为1)的父进程下,已经与当前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,你在终端随意

    4.2K10

    Shell:子shell概念

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

    1.5K30

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

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

    1.6K10

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

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

    1.1K10

    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进程的父进程id为1 测试脚本 #!

    3.1K30

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

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

    1.7K20
    领券