linux笔记:关于进程的基本操作

1、ps命令查看进程。ps -aux查看所有进程。可以用grep提取相关的部分进程,如只看python有关的:ps -aux |grep python。

进程状态:R运行中,T暂停,S休眠静止。

和进程有关的几个命令:暂停kill -STOP pid,恢复kill -STOP pid,停止kill pid。

2、运行命令后,crtl+d退出当前shell;crl+c结束当前进程;ctrl+z暂停当前进程,并且会出现jobsID,如1。想恢复的话,fg 1恢复到前台,bg 1恢复到后台;要停止job,用kill %JobID。查看所有jobs用jobs命令。注意:jobs只存活与本次shell,退出shell所有jobs停止。https://blog.csdn.net/sxhlovehmm/article/details/41318111

3、如果想直接在后台运行,在命令后面加&,此时会直接显示jobsID和PID。

4、退出shell时所有进程会终止。想让程序继续运行的话,可以在运行时前面加一个nohup。

nohup的缺点是,应用程序没有交互界面了,程序的输出将会输出的一个xxx.out文件中,而且以后无法在界面控制程序的结束。

5、输入和输出重定向。

正确结果(stdout)输出到filename:命令 1>filename;命令 1>>filename(追加)。1可省略。注意:命令结束后才会写入文件,因为有缓存,可搜索flush。如果进程被kill的话,就没有任何输出了。

错误结果(stderr)输出到filename:命令 2>filename;命令 2>>filename(追加)。

同时输出stdout和stderr到两个文件:命令 2>filename2 1>filename1

输出stdout和stderr到一个文件(覆盖):命令 1>filename 2>>filename,err要以追加的形式,否则就只剩最后的err记录了。

简化的写法:命令 >filename 2>&1;命令 &>filename。追加:前面的>换成>>。注意:这里的&不是后台的意思,如果要放入后台运行,要在最后再加一个&。

对于python脚本,可以在脚本前面加:sys.stdout =open('stdout.log', 'a') ,sys.stderr =open('stderr.log', 'a') 。这时候执行的时候再重定向就不起作用了,因为还没到print的步骤,就已经把stdout输出到别的地方去了。

一段简单的试验代码

复制代码
 1 #!/usr/bin/python
 2 # -*- coding: UTF-8 -*-
 3 import time
 4 import sys
 5 sys.stdout =open('stdout.log', 'a') 
 6 sys.stderr =open('stderr.log', 'a') 
 7 a=0
 8 while a<1000:
 9     print (a)
10     with open ('log.txt','a') as f:
11         f.write(str(a)+'
')
12     a=a+1
13     time.sleep(1)
14 # 一个error:
15 adsfsdf