shell子进程多任务实现进程高并发

 更新时间:2023年07月31日 10:37:34   作者:〖羊头〗➫ lsy  
本文主要介绍了shell子进程多任务实现进程高并发,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

多进程的作用

提高程序的效率:一些CPU密集型的任务,如数据处理、解压、加密等,使用多进程可以提高程序的执行效率,更快地完成计算任务;

实现更复杂的功能:多进程可以在同一时间向不同的方向处理不同的任务,可以利用这一特性实现更加复杂的功能。

1. 了解实现多进程的方法

Linux 通过后台执行,语法如下:

command &
nohup command &

两种方式都可以实现后台运行,但也存在区别。

1. 通过命令执行

command &:输出的结果显示到终端窗口,会随着终端窗口退出而退出(不建议)

nohup command &:自动将结果输出到 nohup.out 文件(即使异常提示)。这种方式不论是终端退出还是ssh断开,都不会影响后台进程运行

如果后台进程继续运行,可以通过 jobs 查看

推荐几个相关的命令

jobs  #查看后台运行的任务列表
bg    #将冻结的任务运行到后台( bg [jobs列表号] ),可以是 Ctrl + Z 停止的进程
fg    #将后台任务转到前台运行( fg [jobs列表号] )

2. 通过 shell 执行

两者的区别和命令执行差不多,如果shell中使用的 command &,但是执行shell脚本的是 nohup src.sh & ,那么该子进程同样不会随着终端的退出而停止。

不加 nohup

加入 nohup

2. shell 子进程应用

直接在命令后面加 & 其实意义不到,可作用的范围小,一般用于函数的使用。

定义3个函数,用 & 方法将函数变换为子进程

proc1(){
echo "我是子进程1..."
sleep 1000
}
proc2(){
echo "我是子进程2..."
sleep 1000
}
proc3(){
echo "我是子进程3..."
sleep 1000
}
proc1 &
proc2 &
proc3 &
wait
echo "======== 结束 ========"

[函数名] & :表示子进程

wait:表示必须等待子进程结束才能执行下一步

使用 wait 等待子进程,所以主进程并不会退出。来看一下进程信息

如果不使用 wait,程序会继续向下执行

proc1(){
echo "我是子进程1..."
sleep 1000
}
proc1 &
echo "======== 当前进程情况 ========"
ps xl |grep $$ |grep -v grep

可以看到在没有等待子进程的情况会直接向下执行,直到结束也不会停止子进程(此时的子进程的父进程已停止,变成了孤儿进程被进程1接收) 

那么如何解决孤儿进程呢?可以通过 trap 命令捕获异常,子进程随着主进程的退出而退出

trap "[命令1] ; [命令2] ; [命令3]..." EXIT
sleep 1000 &
cpid1="$!"
sleep 1001 &
cpid2="$!"
trap "kill -9 ${cpid1} ${cpid2} 2>/dev/null; echo '退出信号!'; exit" EXIT
echo "======== 当前进程情况 ========"
ps xl |grep $$ |grep -v grep

通过 $! 获取子进程的PID,再使用 trap 捕获退出信号时将其杀死

3. shell 高并发

通过上述的方法了解的子进程实现的原理后,高并发就非常的简单(for循环)

proc1(){
for i in {1..10};do
        echo "我是子进程1" &
done
}
proc2(){
for i in {1..10};do
        echo "我是子进程2" &
done
}
proc1
proc2
wait

proc1(){
echo "我是子进程1"
}
proc2(){
echo "我是子进程2"
}
for k in {1..5};do
        proc1 &
        proc2 &
done
wait

 到此这篇关于shell子进程多任务实现进程高并发的文章就介绍到这了,更多相关shell子进程多任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux shell脚本实现CPU预警

    Linux shell脚本实现CPU预警

    这篇文章主要介绍了Linux shell脚本实现CPU预警的方法,并附上代码以及用法,有需要的小伙伴可以参考下。
    2015-03-03
  • Bash Shell中双引号中的感叹号问题小结

    Bash Shell中双引号中的感叹号问题小结

    当你在双引号中使用感叹号时,如果你在双引号中直接使用感叹号,它可能会被解释为历史扩展的一部分,这篇文章主要介绍了Bash Shell中双引号中的感叹号问题小结,需要的朋友可以参考下
    2024-03-03
  • linux 文件管理命令之dirname \ find \ finds \ in \ indir详解

    linux 文件管理命令之dirname \ find \ finds \ in \ indir详解

    这篇文章主要介绍了linux文件管理命令之dirname\find\finds\in\indir详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • linux shell脚本学习指南

    linux shell脚本学习指南

    这篇文章主要介绍了linux shell脚本学习指南的相关资料,需要的朋友可以参考下
    2022-09-09
  • 检测网段IP使用情况的shell脚本

    检测网段IP使用情况的shell脚本

    检测网段IP使用情况的shell脚本,有需要的朋友可以参考下
    2013-02-02
  • Linux Shell脚本的编程之正则表达式

    Linux Shell脚本的编程之正则表达式

    这篇文章主要介绍了Linux Shell脚本的编程之正则表达式的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • Linux不解压直接查看gzip压缩日志的常用命令

    Linux不解压直接查看gzip压缩日志的常用命令

    在Linux服务器上,日志文件经常会用gzip格式进行压缩,以节省磁盘,对于这种压缩文件,需要解压?然后再用cat、grep这些命令进行查看?其实不需要,本文就给大家介绍了Linux不解压直接查看gzip压缩日志的常用命令,需要的朋友可以参考下
    2024-07-07
  • Linux实时查看CUDA显卡使用情况的常用命令详解

    Linux实时查看CUDA显卡使用情况的常用命令详解

    CUDA是 NVIDIA 推出的通用并行计算平台和编程模型,它不仅使开发者能够利用 GPU 的庞大并行计算能力来加速各类计算密集型任务,还提供了一整套软件工具和库,本文给大家介绍了Linux实时查看CUDA显卡使用情况的常用命令,需要的朋友可以参考下
    2025-06-06
  • Linux 中常用的sed命令

    Linux 中常用的sed命令

    sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。接下来通过本文给大家介绍Linux 中常用的sed命令,感兴趣的朋友一起看看吧
    2017-09-09
  • Linux服务器硬件运行状态及故障邮件提醒的监控脚本分享

    Linux服务器硬件运行状态及故障邮件提醒的监控脚本分享

    这篇文章主要介绍了Linux服务器硬件运行状态及故障邮件提醒的监控脚本分享,能够测试CPU和内存的占用状况以及HTTP端的异常,需要的朋友可以参考下
    2016-03-03

最新评论