除了Screen,还有什么办法让进程在后台运行且可以查看输出?

JiaoKan 发布于 2022-05-15 0 次阅读


绪论

各位在试哟哦那个Linux的时候想比不时会需要用到,或者是听说过Screen这个工具吧,比如在需要关闭当前终端但是需要保存工作状态,让进程不被杀死,或者说要让一个进程后台运行,而且可以查看输出的时候,Screen确实是一个不错的工具
srds,Screen的功能是很强大,但是使用起来难免有忘记参数或是快捷键的时候,或者不想搞这么复杂,或者说有可能遇上需要用Screen却忘了用,导致进程在后台运行却不能获得其输出的这种尴尬情况,本文便是要来解决这些问题的
为了方便解释,本篇利用“test”这一程序来举例,该程序将从0开始不断输出比上一个输出大1的数字,一行一个输出

方法一:输出到文件,并利用&符号后台运行程序

执行命令:

./test > output.out &

运行结果:
file
可以看到这里给出了该后台进程之pid,方便我们使用kill指令杀死这个进程,这时我们便可以在终端里干别的事情了,要查看输出的时候查看output.out文件即可
file

方法二:利用strace命令

这个适用于在后台运行且运行时没有重定向输出的进程,比如下图中的test进程:
file
记录pid,并执行命令:

strace -ewrite -p 162146

运行结果:
file
strace命令可以帮助你trace一个程序的系统调用,比如open之类的,我们分析一下这里的一行代表什么
先是write函数,函数本身的意思是输出
第一个参数代表输出的位置,此处的1表示stdout
第二个参数表示输出的内容
第三个参数不太清楚,但是目前对于我们来说无关紧要
最后等号后面的表示该次系统调用之返回值
可以发现,我们只要关注其中第二个参数即可,当然,有需要的话你也可以加上一个grep命令来过滤一下结果

方法三:直接查看文件描述符,看看stdout被重定向到何处

这个方法比较不常用,这里给出几条参考命令
文件描述符路径:

/proc/$PID/fd/1

查看重定向目的地:

readlink /proc/$PID/fd/1
此作者没有提供个人介绍。
最后更新于 2024-03-11