进程运行与程序流

进程运行

程序运行有2种

前台运行
程序运行在当前的终端,所有的信息都输出到屏幕上,占用你的终端,你也无法继续使用;如果终端异常关闭,导致程序会自动退出
后台运行
不会占用你的终端,程序在系统后台跑着,你该干啥干啥,终端关了,程序也继续运行。

后台运行命令

command &   # 未启动的command放入后台去运行
jobs        # 查看后台进程列表
ctrl + z    # 暂停进程
bg 1        # 程序放入后台运行,和 & 一样
fg 1        # 将后台任务放入前台执行

nohup命令

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下

如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out 文件中。

一般和 & 后台符,结合使用。nohup不加&后台符的话还是前台运行

语法nohup command 选项 &

Command:要执行的命令。

Arg:一些参数,可以指定输出文件。

&:让命令在后台执行,终端退出后命令仍旧执行。

理解linux的数据流

执行linux命令时,linux默认为用户进程提供了3种数据流

stdin
	标准输入:0
	一般是键盘输入数据
	比如cat命令等待用户输入
stdout
	标准输出:1
	程序执行结果,输出到终端
stderr
	标准错误输出:2
	程序执行结果,输出到终端
标准输入
cat 接收键盘的输入数据,然后打印到终端,直到ctrl +d 结束输入
[root@yuchao-tx-server ~]# cat
hello
hello

标准输出
[root@yuchao-linux01 ~]# ls /opt/
HelloWorld.class  HelloWorld.java  jdk  jdk1.8.0_221  jdk-8u221-linux-x64.tar.gz  passwd

标准错误输出
[root@yuchao-linux01 ~]# ls /opppp > stderr.txt
ls: cannot access /opppp: No such file or directory

输出重定向

输出重定向是指把命令(或可执行程序)的标准输出标准错误输出重新定向到指定文件中。

这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。

使用 “ > ”符号,将标准输出重定向到文件中。形式为:命令>文件名
使用“ >> ”符号,将标准输出结果追加到指定文件后面。形式为:命令>>文件名
使用“ 2> ”符号,将标准错误输出重定向到文件中。形式为:命令 2> 文件名
使用“ 2>> ”符号,将标准错误输出追加到指定文件后面。形式为:命令 2>>文件名
使用“ 2>&1 ”符号或“ &> ”符号,将把标准错误输出stderr重定向到标准输出stdout
使用“ >/dev/null ”符号,将命令执行结果重定向到空设备中,也就是不显示任何信息。

2>&1 解释

将stderr重定向到stdout,就可以防止程序运行出错,导致程序异常
写法1
[root@yuchao-tx-server ~]# echhhho '超哥带你学linux' &>> test.log
写法2
[root@yuchao-tx-server ~]# echhhho '超哥带你学linux' >> test.log 2>&1    (写法2使用的人更多)

黑洞文件,空设备文件,也同样遵循,stdout、stderr的语法
[root@yuchao-tx-server ~]# echo '超哥带你学linux' &>>  /dev/null
[root@yuchao-tx-server ~]# echhhhho '超哥带你学linux' &>>  /dev/null
posted @ 2023-07-20 14:34  村尚chun叔  阅读(22)  评论(0编辑  收藏  举报