linux下执行并查看后台进程,jobs,ps,top命令 的区别
背景:王晓茹老师布置的数据挖掘(机器学习)的课程实验 - - 100万条新闻文本的分类。
老师要求了两种方法,朴素贝叶斯和SVM,用队友他们组的服务器跑。
1. 后台运行
用Xshel连上服务器之后,想让进程在后台跑,一般有两种 nohup 和 &:
- 使用&后台运行程序:
- 结果会输出到终端
- 使用Ctrl + C发送SIGINT信号,程序免疫
- 关闭session发送SIGHUP信号,程序关闭
- 使用nohup运行程序:
-
结果默认会输出到nohup.out
-
使用Ctrl + C发送SIGINT信号,程序关闭
-
关闭session发送SIGHUP信号,程序免疫
-nohup和&配合来启动程序:
- 同时免疫SIGINT(ctrl+C)和SIGHUP(会话关闭)信号
需要注意的是:不要将信息输出到终端标准输出,标准错误输出,而要用日志组件将信息记录到日志里
比如我这里用 nohup python3 svm.py &
来执行svm.py的python程序,会在当前文件夹下生成一个nohup.out的日志文件,记录程序的输出或者错误信息。
2. 查看后台进程
还在这次连接窗口下,你用 ps -l
就能查到这个后台进程的进程号比如15411;
当然 ps -a
top -p 15411
也都能查到。
这时候你如果把会话连接断了重新连接;
- 网上很多博客说 jobs配合nohup 查看后台进程;输入
jobs
命令,很可能啥也没有。。。这是为什么? 答案就是:
jobs只能查看当前xshell连接服务器窗口创建的任务。由于在这个新连接下我并没有用nohup启动后台任务,所以就不会有显示 - ps -l 和 ps -a 这个时候也找不到你要查的这个后台进程,(这里有疑问)
top -p 15411
或者ps aux
命令 可以查到。ps -ef | grep wz
可以查看wz用户的所有进程