在 Linux 中停止和恢复进程有什么风险?

har*_*oba 1 linux unix job-control

假设我停止了一个进程,Ctrl+Z并在五小时后使用fg. 就流程的正常运作而言,这有多大风险?

例如,假设vim正在将一个大文件写入磁盘,并且我在写入过程中停止了它。vim当我恢复它时会很高兴地完成写入文件,没有任何问题吗?作为一种极端情况,如果我同时删除了文件会怎样?我最终会损坏文件系统吗?(删除停止vim写入的文件是否可能,或者文件系统驱动程序是否会阻止我删除文件,直到vim完成写入?)

vim显然是一个相对简单的软件,“仅仅是”一个文本编辑器。我是否可以停止和恢复复杂的软件,例如apacheX11不期望有太多问题(除了客户端超时,在 Apache 的情况下)?

小智 6

本质上,Ctrl-Z 并不是一件危险的事情。你不应该害怕它。

究竟会发生什么取决于进程正在做什么。你的例子是值得考虑的好例子。

第一种,用 vim 写一个文件……不会有什么不好的事情发生。如果恢复 vim 时仍有磁盘空间,它将完成写入文件。如果在 vim 挂起时杀死它,该文件将被截断,其中包含挂起之前写入的尽可能多的数据(无论如何,就您需要而言)。如果在 vim 挂起时删除文件,基本上 vim 将继续查看该文件,只要它需要它。在 vim 外部,该文件将被视为已删除,但 vim 仍会看到它,直到它完成写入并关闭它,此时它会消失。(如果 vim 尝试重新打开它,它将消失。)在您习惯了最后的行为之后,您会觉得当 Windows 锁定文件时,您正在使用一个愚蠢的玩具。

你的第二个例子可能会导致问题。如果有其他进程与你的进程交互,他们都会在等待这个应用程序时有点卡住。所以是的,客户端超时会发生,一些进程可能会无限期地阻塞等待读取数据等。但仍然没有真正“坏”的事情发生。除非某处存在错误,否则不会损坏系统。(例如,无法处理超时的编写不佳的应用程序只会放弃并丢失其所有数据......但这不是您暂停的应用程序的错。)

显然,Apache 将停止提供网页服务。X11 将停止推动像素。但是通常当你再次启动它时,被阻塞的东西会恢复,如果客户端超时,如果你重新启动它们,它们也会再次正常工作。