后台执行
后台执行
后台执行一段脚本,主要是使用了&符号。除了正常的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很像,只解析双引号里面的变量值。而$$这个特殊的变量是当前的进程号。