大家知道进程是Unix操作系统的是守护神。可在任务已经执行完成了,但是却没有正常结束进程。又或者进程无缘无故占用了大量的系统资源,导致系统速度减慢,影响了其他作业的正常运行。对于这些不服管教的进程,系统工程师只能够拿起手中的屠刀,实行“杀无赦”政策。下面,我们来学习2种方法来解决这个问题。
通过父进程来杀死子进程。
在Unix操作系统中,进程有父子进程的关系。某个进程可能会创建另外一个进程,这个创建者就是父进程,而新建立的进程就是子进程。通常情况下,Unix操作系统如果停止了一个父进程,则该父进程产生的所有子进程都将自动终止。但是,这个过程可能会破坏数据文件或者其他一些难以预料的结果。故正常情况下,笔者是建议系统工程师先关闭掉所有的子进程,然后再关闭父进程。
但是,当采取了任何手段,包括kill -9手段之后仍然无法正常杀死顽固进程之后,Unix操作系统工程师只好采用这个终极杀手,即通过关闭父进程来自动关闭不听话的子进程。
但是,正如上面所说的,这很可能会导致一些连锁反映。所以在采用这种方式之前,系统工程师还是要预先估计一下可能会带来的后果。如可以把这个父进程所产生的子进程能够关闭的先关闭掉。然后再通过杀死父进程来自动终止子进程。这可以把对操作系统的不利影响降低到最低。
利用系统注销功能来关闭杀不掉的进程。
若通过关闭父进程仍然杀不死子进程的话,那么管理员还可以通过注销系统的方式来杀死进程。这就好象Windows系统注销一样,会关闭当前的所有进程与任务。不过有时候系统工程师可能不想关闭所有的进程,如一些关系到服务器运行的进程。此时,系统工程师在注销Unix操作系统之前,需要采取一定的手段,让系统注销后仍然能够保持某些进程正常运转。
如果系统工程师想在系统注销后仍然执行一个或者多个进程,则可以采用nohup命令。如此设置后,即使在系统注销后,在后台执行的进程仍然可以继续执行,不会终止。这个手段就可以把系统注销对于用户的不利影响降低到最低。如果Unix操作系统是企业中的一台服务器,而不是客户端,那么这个特性将会对企业很有利。
nohup命令运行由Command参数和任何相关的Arg参数指定的命令,而忽略所有挂断信号。为此在系统注销后仍然可以使用nohup命令运行后台中的程序。注意无论是否将 nohup命令的输出重定向到终端,输出都将附加到当前目录的nohup.out 文件中。如果当前目录的nohup.out文件不可写,则输出重定向到$HOME/nohup.out 文件中。
如果上面这些文件都不可以用的话,那么Command参数指定的命令不可调用。故系统工程师如果事后要查看这些Unix操作系统注销后仍然运行在后台进程的结果,就可以依次查看以上这两个文件。
Unix操作系统注销后,通常再顽固的进程都会被杀死掉。不过有时候会因为进程实在难缠,注销的过程时间可能会比较长。若操作系统在长时间后仍然无法注销的话,那只有强制重新启动电脑了。不过重新启动后很可能会出现启动故障。
重新启动系统来终止进程是不得已而为止的做法了。所以,我们尽量不要选择这个方法,希望大家都能够提高自己的Unix操作系统的操作水平。
【编辑推荐】