linux 进程总结

来源:互联网 发布:安畅网络水军平台 编辑:程序博客网 时间:2024/04/30 08:29
每个进程都有一个父进程,初始的内核级进程通常是自己的父进程,id为0的进程通常是调用进程,常常被称为交换进程。id为1的进程是init进程,在内核自举过程结束时由内核调用。该进程的程序文件现在一般是/sbin/init文件。这个进程负责在自举内核后启动一个unix系统。init通常读取与系统有关的初始化文件,并将系统引导到一个状态。init进程绝对不会终止,而且它身为一个普通的用户进程(不是内核中的系统进程),但是它以超级用户特权进行。当子进程的父进程在子进程结束之前首先结束时,子进程会被init进程收养,即子进程的父进程称为init进程。父进程已经提前终止的子进程被称为孤儿进程,它们被init进程收养。
子进程结束时,内核会为每个终止子进程保存了一定量的消息,所以当终止进程的父进程调用wait或者waitid时,可以得到这些消息,这些消息至少包括进程id,该进程的终止状态以及该进程使用的CPU时间总量。一个已经终止、但是其父进程尚未对其进行善后处理的进程称为 僵死进程。如果不及时对这些僵死进程进行处理,内存中将会充满僵死进程,从而浪费掉大量资源。
在进程正常终止时,会将其退出状态作为参数传递给exit函数,返回一个终止状态。在异常终止的时候,内核将产生一个指示其异常终止原因的终止状态。退出状态和终止状态是不同的。父进程可以通过wait或者waitpid获得子进程的退出状态。
创建子进程的方法是使用fork()函数,这个函数被调用一次,会返回两次,对于父进程将会返回子进程的id,对于子进程将会返回0.子进程如果想要获取其父进程的id可以使用getppid,但是父进程并没有相应的函数获取其子进程的id,所以在使用fork函数时对父子进程才会返回子进程的id,这是获取子进程id的一个方法。

通过ps 可以查看当前的进程。ps -l可以查看当前的bash中运行的程序,ps -aux则会将系统所有的进程列出来。
top也是用来查看当前的进程,但是与ps相比,top是动态的,即会动态的显示当前的进程,每5s会刷新一次。
pstree会显示进程的之间的关系。

jobs可以查看当前在后台执行的进程。

让程序在后台执行的方法是在执行程序的命令行后加上 &。但是这个后台所说的只是不受到终端机模式下的ctrl+c影响。
使用ctrl+z可以使程序在后台暂停。fg可以将程序拿到前台去处理。而bg可以使后台暂停的程序在后台执行。另外使用kill可以发送信号管理后台的工作。默认是kill -15,这个代表以正常的程序方式终止一项工作,使用kill -9可以强制删除一个工作。kill -1则是会使得程序重新读取参数的配置文件。
kill后面要跟进程的id,但是这样还需要配合ps命令来查看进程的id,在不知道id的情况下,可以使用killall来发送信号,killall后面只需要加上进程的名称。

但是如果想让程序能够彻底与终端无关,可以使用nohup命令,nohup     &,可以使得程序不受终端影响。

 进程的执行顺序与进程的优先级有关,可以通过nice来改变进程的优先级,PRI(优先执行序)越低代表越优先,nice值只可以影响PRI,但是并不能决定优先级。nice是在一开始执行程序的时候就给予一个特定的nice值。调整某个已经存在的进程的nice值,使用renice命令。

free可以查看内存的使用情况。

uname查看与内核相关的信息。

netstat可以跟踪网络。
0 0