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

bash如何杀死父进程,或从bash模块脚本中的函数退出父进程

在bash中,要杀死父进程或从bash模块脚本中的函数退出父进程,可以使用以下方法:

  1. 使用kill命令:可以使用kill命令来终止指定进程。首先,需要获取父进程的进程ID(PID),可以使用命令ps -ef | grep bash来查找父进程的PID。然后,使用kill命令加上PID来终止父进程。例如,如果父进程的PID是1234,可以使用命令kill 1234来杀死父进程。
  2. 使用exit命令:在bash模块脚本中的函数中,可以使用exit命令来退出当前进程。如果希望退出父进程,可以在函数中使用exit命令,并指定一个非零的退出状态码。父进程会接收到这个退出状态码,并根据需要进行处理。例如,在bash脚本中的函数中使用exit 1来退出父进程,并返回退出状态码1。

需要注意的是,以上方法只能终止当前进程的父进程,无法直接终止其他进程。如果需要终止其他进程,可以使用相应的进程管理工具或命令。

关于bash的更多信息和用法,可以参考腾讯云的产品文档:Bash脚本

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

相关·内容

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

当cp命令执行完毕,它将自己退出状态码告知进程,此次复制是成功还是失败,然后cp进程自己消逝掉,进程bash被唤醒再次进入等待队列,并且此时bash已经获得了cp退出状态码。...事实也确实如此,shell脚本只会继承shell一项属性:进程所存储各命令路径。另外,执行shell脚本有一个动作:命令执行完毕后自动退出子shell。...exec:exec是加载程序替换当前进程,所以它不开启子shell,而是直接在当前shell执行命令脚本,执行完exec后直接退出exec所在shell。...一般方法也是最简单方法是使用nohup命令带上要执行命令脚本放入后台,这样任务就脱离了终端关联。当终端退出时,该任务将自动挂到init(systemd)进程下执行。...如果在特殊情况下,子进程终止了,但进程没收到SIGCHLD信号,没收到这信号原因可能是多种,不管如何,此时子进程已经成了永存僵尸,能轻易被pstop捕捉到。

1.7K20

dockerreap问题

问题 僵尸进程 僵尸进程是指完成执行(通过exit系统调用,运行时发生致命错误收到终止信号所致),但在操作系统进程仍然有一个表项,处于“终止状态”进程。...子进程死后,系统会发送SIGCHLD信号给进程进程对其默认处理是忽略。如果想响应这个消息,进程通常在SIGCHLD信号处理程序,使用wait系统调用来响应子进程终止。...僵尸进程被reap后,其进程号与在进程表项都可以被系统重用。但如果进程没有调用wait,僵尸进程将保留进程表项,导致资源泄漏。...为避免产生僵尸进程,实际应用中一般采取方式是: 将进程对SIGCHLD信号处理函数设置SIG_IGN fork两次并杀死一级自进程,令二级子进程成为孤儿进程而被init所“收养”、清理 与docker...假设容器跑一个Web服务器,这个服务器运行bash编写CGI脚本脚本调用了grep。Web服务器发现脚本执行超时,杀掉了它,但是grep进程没有受到影响并继续运行。

1.2K30

详解僵尸进程与孤儿进程

但这个过程存在两个问题,那就是如果进程先于子进程退出了怎么办?以及子进程退出以后,进程始终没有调用 wait waitpid 怎么办?这就产生了两种进程:孤儿进程与僵尸进程。...4.1 wait/waitpid 如上文所述,子进程死后,会发送 SIGCHLD 信号给进程,只要进程收到此信号后执行 wait/waitpid 函数为子进程收尸即可,子进程就会顺利僵死状态变为彻底消失...4.4 fork 两次 在建立子进程时,使用 2 次 fork,让所建立进程成为进程孙子进程,而实际进程则随即推出,和第三条相同,由于孙子进程进程已经退出,所以在孙子进程会被自动过继给守护进程...这也就意味着,在我们 docker ,如果某一层进程退出,那么他所有子孙进程在结束后都会变成僵尸进程。 5.2 守护进程 如何解决这个问题呢?...另一方面,通过 bash 创建出来进程,无论其执行结果如何bash 都会以 0 作为返回状态退出,这样一来,如果实际执行进程是异常崩溃,我们就没有办法获取到这个进程返回码了,而 docker

1.8K20

Linux 进程后台运行几种方式(screen)

/rsync.sh & # jobs 但是如上方到后台执行进程,其父进程还是当前终端shell进程,而一旦进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。...如果我们要在退出shell时候继续运行进程,则需要使用nohup忽略hangup信号,或者setsid将将进程设为init进程(进程号为1):对于已经在前台执行命令,也可以重新放到后台执行,首先按.../rsync.sh screen创建一个执行脚本单窗口会话,可以attach进程ID # screen -wipe 检查目前所有的screen作业,并删除已经无法使用screen作业 正常情况下,当你退出一个窗口中最后一个程序...另一个关闭窗口方法是使用C-a k,这个快捷键杀死当前窗口,同时也将杀死这个窗口中正在运行进程。 在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。...C-a w 显示所有窗口列表 C-a k 这个快捷键杀死当前窗口,同时也将杀死这个窗口中正在运行进程

3.8K00

【Linux】进程状态

我们发现,子进程退出后确实维持了一段时间僵尸状态,后面被进程回收。   但是如果进程没有读取子进程信息呢?   这个时候,僵尸状态进程就会一直存在。...孤儿进程   进程还有一种特殊进程——孤儿进程,就跟名字那样,没有进程进程,也就是只有子进程。...,子进程变为僵尸进程,而是变为了休眠状态,我们不妨查看这个进程ppid:   我们发现其实这时候子进程进程依旧存在,并且进程变为了bash!   ...其实,在Linux,如果一个进程创建了子进程,但是进程要先比子进程退出,这时候 子进程会被1号进程(操作系统)托管。   ...僵尸进程会影响系统效率,僵尸是因为 进程没有接收子进程资源数据,使得子进程成为僵尸。 进程要比子进程退出,则这个子进程就变为了孤儿进程,并且由 bash 托管。

10110

Linux 守护进程|应急响应

我见过各种骚操作,有的是写脚本,有的是手动挨个杀,用killall、pkill等等,这种回复一看就是没遇到那种进程pid,进程名称一直变化 其实非常简单,我们只需要把这个进程组给杀死就好了 kill...session第一个进程(一般是bashPID就是sessionSID 现在大招来了,如何干掉整个session呢? pkill -s SID 实验开始 ?...或者更简单地说,在setsid()调用之后执行第二个fork(),然后再次让进程退出并让孙子进程继续执行。...在关闭了文件描述符0、1和2之后,daemon通常会打开/dev/null并使用dup2()(类似的函数)使所有这些描述符指向这个设备。...它防止了daemon后面使用描述符12打开一个文件情况,因为库函数会将这些描述符当做标准输出和标准错误来写入数据(进而破坏了原有的数据)。

3.8K30

如何编写bash脚本以便在进程死机时重新启动进程

bash脚本来检查它是否正在运行,如果没有,则启动它。...: # crontab */5 * * * * /path/to/keepalivescript.sh 答: 避免使用 PID 文件、cron 其他任何试图评估不属于其子进程进程。...假设你进程名为procA,监控它进程名为procB,则需要procB成为procA进程。因为只有启动你进程进程才能可靠地等待它结束。而这在Bash很容易实现。...然后需要做就是启动这个bash脚本,它将监控procA并在必要时重新启动它。如果你想在(操作系统)启动时启动监控脚本,你可以用@reboot规则在用户 cron(1) 调度它。...PID重用(可能导致杀死错误进程)。 2. PID文件过时。你需要过于更复杂逻辑来检查PID文件是否过时,而任何这样逻辑都同样有1缺陷。 3.

17720

孤儿进程和僵尸进程概念及进程回收(wait函数及waitpid函数

一.孤儿进程 孤儿进程可以理解为一个子进程进程英年早逝(进程先于子进程退出),就将这样一个进程称为孤儿进程,在linux操作系统上。...进程处于阻塞状态(陷入死循环)。 再开启另外一个bash窗口,使用ps -aux | grep 3749命令查看僵尸进程状态。 defunct是已死,僵尸意思。...所以在实际编程,避免和防范僵尸进程产生显得尤为重要。 三.进程回收 (1)回收僵尸进程资源,一种比较暴力做法是将其父进程杀死,那么子进程资源也将被回收。...但是这种做法在大多数情况下都是不可取,如进程是一个服务器程序,如果为了回收其子进程资源,而杀死服务器程序,那么将导致整个服务器崩溃,得不偿失。...判断子进程如何 (1)正常退出 (2)被信号杀死 (1)WIFEXITED(status):为非0,进程正常结束。

1.3K20

linux进程管理:进程,程序,线程 & 9个进程管理工具 & 作业控制

进程拥有进程权限,资源(特性),子进程可以运行自己程序(exec),运行完退出(exit),然后唤醒进程。...当子进程完成时发出(exit)信号请求,在退出时,子进程已经关闭丢弃了其资源环境,剩余部分称之为僵停(僵尸Zombie)。...进程在子进程退出时收到信号而被唤醒,清理剩余结构,然后继续执行其自己程序代码。...在这里注意:kill 0 0不代表信号ID。(3)kill 0 不发送任何信号,常用来检测进程是否存在,在脚本echo$?,存在返回0,不存在返回1。...:**杀死进程 选择某一进程按F9即可杀死进程,很方便 F10:退出htop 8. vmstat vmstat命令是最常见Linux/Unix监控工具,可以展现给定时间间隔服务器状态值,包括服务器

3.4K10

BashShell变量

在子进程修改全局变量只对子进程及其更下层进程有效,对进程是无效,即子进程修改无法反映到进程进程全局变量仍然保持原样。 总而言之,即全局变量增删改查都只是向下单层单向独立继承。...var} 3.5 删除环境变量 在 Bash Shell 使用 unset 命令来删除环境变量。 unset var 和修改全局变量类似,在子进程删除全局变量也无法反映到进程。...【注】有些 Linux 发行版使用了「可拆卸认证模块」(PAM),在这种情况下,PAM 文件会在 Bash Shell 启动之前处理,这些文件也可能会包含环境变量。...BASH_ALIASES 含有当前已设置别名关联数组 BASH_ARGC 含有传入子函数 Shell 脚本参数总数数组变量 BASH_ARCV 含有传入子函数 Shell 脚本参数数组变量...进程 PID PROMPT_COMMAND 设置了的话,在命令行主提示符显示之前会执行这条命令 PROMPT_DIRTRIM 用来定义当启用了 \w \W 提示符字符串转义时显示尾部目录名数量

2.4K30

Linux下进程相关知识

现在看看你终端,你将看到正在运行进程是你shell,因此在我系统上有一个运行bash进程。现在请记住,当你运行ps l命令时,是运行bash进程运行它。...僵尸进程当子进程终止而进程还没有调用wait时会发生什么? 我们仍然希望能够看到子进程如何终止,因此即使子进程完成了,内核也会将子进程变成僵尸进程。...子进程使用资源仍然被释放给其他进程使用,但是进程仍然有这个僵尸进程条目。僵尸进程也不能被杀死,因为它们在技术上是“死亡”,所以你不能使用信号来杀死它们。...一些最常见信号是: SIGHUPHUP1:挂机 SIGINTINT2:中断 SIGKILLKILL9:杀死 SIGSEGVSEGV11:分割错误 SIGTERMTERM15:软件终止...我们可以控制我们进程如何运行: 将工作发送到后台 在命令后添加&号将在后台运行该命令: sleep 1000 & sleep 1001 & sleep 1002 & 查看后台进程进程后台移动到前台

1.4K50

神奇Java僵尸(defunct)进程问题排查过程

原文链接:https://www.jianshu.com/u/21add3dce532 现象描述 大概1个月多以前 在启动脚本增加了tail -f 用来启动后追踪日志判断是否启动成功 后发现无法执行...tail问题 后来启动脚本中去掉tail 发现问题解决 But 当时一直没有来得及排查是如何引起僵尸进程问题 这两天抽时间排查了一下 发现和tail没有一毛钱关系 艰难排查过程1-尝试复现 测试代码...那么应该比较复现吧 修改了一个游戏服务器启动脚本 默认是没有加tail 现在加上了tail -f 启动游戏服务器脚本 看到日志 启动成功 ctrl+c 退出tail 调用shutdown.sh 发现服务器顺利关闭...shutdown 总结2 正常启动脚本 没有tail java进程进程是1 即init进程 使用shutdown脚本关闭java进程后 自动被init进程回收 启动脚本加了tail 此时java.../jstack都卡住了一样 只能ctrl+c退出 然后错误操作就是使用kill -9 这个会把进程给干掉 但是因为进程sh被暂停了 所以无法waitPid 执行子进程回收操作 从而导致java进程变为了僵尸进程

5K30

支持多用户web终端实现及安全保障(nodejs)

->async,当子进程退出时触发&baton->async消息,执行pty_after_waitpid函数; 最后父进程通过调用uv_thread_create创建一个子进程,用于侦听上一个子进程退出消息...(通过执行系统调用wait4,阻塞侦听特定pid进程退出信息存放在第三个参数),pty_waitpid函数封装了wait4函数,同时在函数末尾执行uv_async_send(&baton->async...此处关于进程、主设备、子进程设备输入输出描述有些让人迷惑,在此解释。进程与主设备关系是:进程通过系统调用创建主设备(可看做是一个PIPE),并获取主设备fd。...因此子进程输入输出都是与设备fd相关联,子进程输出数据走是PIPE,并从PIPE读入进程命令。...当一个被发现是shell脚本命令被执行时,rbash会关闭在shell中生成任何限制来执行脚本。 当用户rbash运行bashdash,那么他们获得了无限制shell。

1.6K50

《Linux命令行与shell脚本编程大全》 第六章环境变量

设定全局变量进程所创建进程,该变量都是可见。...对PATH修改只能持续到退出重启系统,不能一直持续。 6.6 定位系统环境变量 登入系统启动一个bash shell时,默认情况下bash会在几个文件查找命令。这种文件叫做启动文件环境文件。...这种进程不会访问/etc/profile,只会检查HOME下.bashrc .bashrc有两个作用:1.查看/etc目录下通用bashrc文件、2.为用户提供一个定制自己命令别名和私有脚本函数地方...我电脑没有BASH_ENV值。是如何处理呢?通过继承shell导出过变量。 比如:shell是登录shell。...可以在/etc/profile.d 目录下创建一个.sh结尾文件,把所有新修改过全局变量放在这个文件 存储个人永久性bash shell地方是HOME/.bashrc。

1K100

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

fork()是如何创建进程,又是如何返回。...首先反常第一点,我们在程序打印顺序是先进入子进程(pid == 0)分支,再进入进程(pid > 0)分支,但实际打印顺序是先执行了进程分支printf()函数,后执行进程分支到printf...我们可以在进程中加一个sleep()函数(放开上面代码test1注释掉代码即可),让进程等一下子进程,并看一下效果,这次就好了。...杀死进程,实际上相当于 kill -SIGKILL pid,也可以直接通过 kill pid 来杀死pid进程; 我们再做一个测试,将上面代码test2处注释放开,编译并运行程序,让两个进程一直在...也就是 bash shell 进程 通过kill杀死进程,可以看到子进程被1号进程接管 1号进程就是init进程 3.

14410

在当前bash(sh)执行脚本和注册函数

在研究《管理Python虚拟环境脚本》时,我们使用了source指令而没有使用sh或者bash来执行脚本,就是因为source指令可以让脚本在当前bash(sh)执行;而sh或者bash则会新启动一个...我们可以通过下面这个脚本做测试 # test.sh # 用一个数组保存进程ID和进程名 processInfo=() # 查找进程进程号 findParentID() { if [ $1...source source test.sh $$ processInfo: 40883 bash 可以见得没有启动新bash程序。 source还可以让自动注册脚本函数。...比如上面指令让脚本findParentID方法可以直接被使用。...-o -n "${ZSH_VERSION:-}" ] ; then hash -r 2> /dev/null fi 如果我们使用bash来执行,则因为虚拟环境会在新启动bash存在,并会快速退出

15910

【Linux】开始掌握进程控制吧!

2 进程创建 2.1 fork函数初识 在linuxfork函数时非常重要函数,它从已存在进程创建一个新进程。新进程为子进程,而原进程进程。...很好理解:就像现实生活,父母有了孩子,会给他她起一个名字,父母知道了名字,就可以很好管理孩子。进程与子进程同理,进程为了便于管理子进程,所以fork函数会返回对应子进程pid。...bash 环境变量,这个100 就是刚才进程返回到进程bash退出码(环境变量 ?...查看进程退出码): main函数return,表示进程终止 调用exit _exit 异常退出: ctrl + c,信号终止 来看手册如何描述: 调用exit 函数试试: 1 #include...另外,进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼”kill -9 也无能为力,因为谁也没有办法杀死一个已经死去进程。 最后,进程派给子进程任务完成的如何,我们需要知道。

9210

【Linux系统编程】通过系统调用获取进程标识符 及 创建子进程(fork)

至于如何做到得,我们后面再说。 那为什么bash启动程序,最终生成进程它们进程都是bash呢?...,我们来看一下他返回到底是什么: 翻译一下就是: fork成功的话,在进程返回子进程PID,在子进程返回0。...相反,进程地址空间会被标记为共享,并且只有在子进程进程试图修改共享数据时,才会进行写时拷贝。...这时,操作系统会将要修改内存页复制到一个新物理页,然后对于进程将修改后数据写入这个新,使得子进程进程数据相互独立。...3.7 如何理解fork两个返回值问题 首先大家来思考一个问题:一个函数将要return时候,它完成主体功能是否已经执行完了? 当然是的!

23810

Shell脚本调用另一个脚本三种方法

使用sh命令来调用另外脚本和前面两种方法有着本质区别。使用sh命令则会开启新Shell进程来执行指定脚本,这样的话,进程变量在子进程中就无法访问。...shell脚本无法访问进程变量。...我们如何让子进程访问进程变量呢?可以使用export命令。...(3)全局变量:在脚本定义,仅在当前Shell脚本中有效,其他Shell脚本进程不能访本,其作用域定义位置开始,到脚本结束被显示删除地方为止。...注意,全局变量既可以在Shell函数内定义,也可以在shell函数外定义,因为shell函数内定义变量默认为global,且作用域函数被调用时执行变量定义地方”开始,到脚本结束被显示删除地方为止

12K50
领券