(1):bash son.sh

cat /root/son.sh
#!/bin/bash
echo 1
[root@boy ~]# bash son.sh
1
`夯住`# 夯住时
├─sshd(1076)───sshd(12592)─┬─bash(12596)───bash(12827)───sleep(12828)└─bash(12673)───pstree(12829)
# 当执行完成后,子shell会回到父shell中
├─sshd(1076)───sshd(12592)─┬─bash(12596)└─bash(12673)───pstree(12831)

(2):bash son.sh(夯住)

cat /root/son.sh
#!/bin/bash
while :
doecho 1 >>/root/son.logsleep 10
done
[root@boy ~]# bash son.sh
`卡住`├─sshd(1076)───sshd(12592)─┬─bash(12596)───bash(12876)───sleep(12877)└─bash(12673)───pstree(12879)#分析:12596为登录时生成的那个bash,在我执行bash son.sh后,生成了一个子bash(12876),且在执行son.sh时12596会夯住(阻塞在那了,等待子bash执行完成,但是我son.sh会无限循环的,意味着子bash永远不会返回,也就是用户在12596那个shell上无法操作)

(3):bash son.sh &

cat /root/son.sh
#!/bin/bash
while :
doecho 1 >>/root/son.logsleep 10
done
[root@boy ~]# bash son.sh &
[1] 13089
[root@boy ~]# jobs
[1]+  Running                 bash son.sh &
[root@boy ~]# echo $BASHPID
12596├─sshd(1076)───sshd(12592)─┬─bash(12596)───bash(13089)───sleep(13099)└─bash(12673)───pstree(13100)# 分析:生成子bash方式与(2)没有多大区别,唯一的区别就是加了&后,13089放在后台去执行了,12596还可以进行其他操作

(4):source son.sh

cat /root/son.sh
#!/bin/bash
while :
doecho 1 >>/root/son.logsleep 10
done
[root@boy ~]# source son.sh
`卡住`├─sshd(1076)───sshd(12592)─┬─bash(12596)───sleep(13133)└─bash(12673)───pstree(13134)# 分析使用source后,父bash不会生成子bash,但是存在12596这个bash夯在前台了

(5):source son.sh &

cat /root/son.sh
#!/bin/bash
while :
doecho 1 >>/root/son.logsleep 10
done
[root@boy ~]# source son.sh &
[1] 13151
[root@boy ~]# echo $BASHPID
12596├─sshd(1076)───sshd(12592)─┬─bash(12596)───bash(13151)───sleep(13152)└─bash(12673)───pstree(13153)# 分析:通过观察可以发现,不管是使用bash、source执行脚本,只要后面加了&放后台执行,都会生成子shell,12596此时能接受用户输入

(6):nohub bash son.sh &

cat /root/son.sh
#!/bin/bash
while :
doecho 1 >>/root/son.logsleep 10
done
[root@boy ~]# nohup bash son.sh &
[1] 13284
[root@boy ~]# nohup: ignoring input and appending output to ‘nohup.out’
[root@boy ~]# echo $BASHPID
13248├─sshd(1076)───sshd(12592)─┬─bash(12673)───pstree(13287)└─bash(13248)───bash(13284)───sleep(13286)# 13248 执行exit后
├─bash(13284)───sleep(13298)
├─sshd(1076)───sshd(12592)───bash(12673)───pstree(13299)# 分析可以发现13284在用户退出登陆后,任然在后台执行

(7):nohub source son.sh &

cat /root/son.sh
#!/bin/bash
while :
doecho 1 >>/root/son.logsleep 10
done
[root@boy ~]# nohup source son.sh &
[1] 13440
[root@boy ~]# nohup: ignoring input and appending output to ‘nohup.out’
nohup: failed to run command ‘source’: No such file or directory
# 如果用nohub 执行java等相关命令也显示没有时,脚本开头加上source /etc/profile 等,引入变量

结论:

  • 平常在rc.local或者cron中运行其他脚本的时候需要根据调用的脚本是否会夯住,灵活使用nohub和&,解决rc.local,cron中其他内容没有执行

Linux 父进程子进程的进程分析相关推荐

  1. 进程 — 子进程与父进程的关系

    程序一: #include <sys/types.h> #include <unistd.h> #include <stdio.h>//子进程与父进程间的关系int ...

  2. Linux 父进程 子进程 回收,回收 fork() 的子进程

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 使用 fork() 函数派生出多个子进程来并行执行程序的不同代码块,是一种常用的编程泛型.但是,在使用 fork() 函 ...

  3. linux父进程和子进程查看,linux查看父子进程

    python多进程代码 test.py #coding=utf-8 import multiprocessing import time def func(msg): print "msg: ...

  4. 第一次作业:Linux 2.6.32的进程模型与调度器分析

    1.前言 本文分析的是Linux 2.6.32版的进程模型以及调度器分析.在线查看  源码下载 本文主要讨论以下几个问题: 什么是进程?进程是如何产生的?进程都有那些? 在操作系统中,进程是如何被管理 ...

  5. linux培训描述,【linux培训班】关于linux系统记录和描述进程的分析

    从C语言源代码分析,神秘的Linux系统是如何记录和描述进程的?也许我们习惯用Windows系统,可程序员最爱的还是linux系统,毕竟这样的系统安全性比较高,可操作的难度也是有的,不适合小白来使用. ...

  6. linux内核调度 0号进程,Linux内核源代码情景分析---第四章 进程与进程调度

    4.1 进程四要素 什么是进程? 1:有一段代码段供其执行,这代码段不一定是进程所专用,可以与其他进程公用. 2:每个进程有其专用的系统空间的堆栈(栈)[这个栈是进程起码的"私有财产&quo ...

  7. linux进程创建过程,Linux 进程创建过程的分析

    内容说明 本次的内容,是一次 MOOC 课程的作业.具体的,是使用汇编对 Linux 系统调用部分进行模拟实现,从而更加直观的验证 Linux 系统的基本机制. 作业声明 qianyizhou17 + ...

  8. [入门篇]Linux操作系统fork子进程的创建以及进程的状态 超超超详解!!!我不允许有人错过!!!

    目录 0.前言 1.fork()创建子进程讲解 1.1fork()的简单介绍 1.2 创建子进程详解 1.2.1 如何理解fork创建子进程 1.2.2 子进程的PCB以及子进程的代码和数据 1.2. ...

  9. 实验六:分析Linux内核创建一个新进程的过程

    20135108 李泽源 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h ...

最新文章

  1. TSNE 附有codechina代码
  2. 华视电子读卡器web开发_业界动态:华视电子官方微信公众号电子书架正式上线...
  3. 几个有用的Linux命令
  4. Mysql的concat concat_ws group_concat
  5. Product ID Not in valid range
  6. 项目管理基础:系统分析相关概念介绍
  7. html5 下拉刷新(pc+移动网页源码)
  8. 对TRIM SCSI命令的一些分析
  9. java代码中执行sql报错:java.sql.SQLException: ORA-00923: 未找到要求的 FROM 关键字
  10. web worker 的传值方式以及耗时对比
  11. 计算机视觉之语义分割
  12. 用手画了11张图终于搞明白了Git工作流,我怀疑你用的是假 Git
  13. 通信技术属于计算机相关专业吗,通信技术属于计算机类专业吗
  14. FlashFXP 破解版下载地址
  15. 使用python搜索Excel表,查找内容
  16. gradient设置上下渐变_CSS3中渐变gradient详解
  17. Oracle CPU占用过高解决办法
  18. C语言丨整蛊必备小程序,好玩炸翻天(附源码)
  19. DataStage 简介
  20. python做工控机_工控机折腾小记

热门文章

  1. 太棒了,Github 上面星标10K+ 的阿里巴巴社招面试感悟!(附海量面试复习资料)
  2. ICO和区块链的关系
  3. mac系统升级导致VirtualBox报Kernel driver not installed (rc=-1908)
  4. 什么样的代码是好代码_什么使好代码3 7
  5. 在IPCam上搭建WEB服务并通过CGI交互的相关问题
  6. 内容创业赛道分野,2018紧,2019更紧
  7. ns3网络模拟器使用相关问题
  8. python提取pdf文字,python 提取pdf文字
  9. 什么样的Java程序员可以去BAT公司上班?
  10. BUUCTF刷题笔记