后台执行

后台执行

后台执行一段脚本,主要是使用了&符号。除了正常的command &以外,shell脚本里面的函数也能。主要有两种形式。

资源

https://blog.csdn.net/mgxcool/article/details/50715864

后台执行

形式一

定义一个函数,在执行函数的时候,添加&。注意:可以用ps命令查看到,有两个进程,但是进程的变量$$都是显示主进程的id。

myfunction(){
   # 一系列命令
}
myfunction &

示例:

#!/bin/sh

myfunc(){
   while (true)
      do  
        echo "1234   $$";
        sleep 1;
      done
}
myfunc &

while (true)
do
    echo "master   $$"
    sleep 10; 
done

形式二

相当于上面的简化形式,省略定义函数的过程。要后台执行的代码放到一个括号里面,末尾添加&。

{
    # 一系列命令
} &

示例:

#!/bin/sh

{
   while (true)
      do  
        echo "1234   $$";
        sleep 1;
      done
} &

while (true)
do
    echo "master   $$"
    sleep 10; 
done

形式三

除了写在一个shell里面,也能分开写到不同的shell里面,这是比较常见的形式。

格式

someshell.sh &

程序后台执行

nohup

nohup socat tcp-listen:62222,reuseaddr,fork tcp:127.0.0.1:22 >/dev/null 2>&1 & 

备注:nohup有可能需要手动安装。

tmux

在tmux里面,直接挂进程,好处是,跟在终端执行,没理由啥区别,而且呢,能看到进程的输出内容。至于输出的历史,貌似……还不清楚在哪找。

tmux new -s myjob
tmux a -t myjob
# 在tmux里面  直接挂进程

扩展

除了上面知识点以外,注意shell里面的字符串规则跟php很像,只解析双引号里面的变量值。而$$这个特殊的变量是当前的进程号。