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


1

假设我停止使用过程,Ctrl+Z并在五小时后恢复使用fg。关于过程的正常运作,这有多大的风险?

例如,假设vim正在编写一个大文件到磁盘,并且我在写入期间停止它。vim当我恢复文件时,会很高兴完成文件的写入,没有任何问题吗?作为极端情况,如果我在此期间删除文件会发生什么?我最终会破坏文件系统吗?(是否删除了已停止vim写入的文件,或者文件系统驱动程序是否会阻止我删除文件,直到vim写完文件为止?)

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

Answers:


6

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

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

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

你的第二个例子可能会导致问题 如果有其他进程与您的进程交互,那么它们将在这个应用程序上等待一段时间。所以是的,会发生客户端超时,某些进程可能会无限期地阻止等待读取数据等等。但是仍然没有什么真正“坏”会发生。没有任何东西可以破坏系统,除非某处有错误。(例如,写得不好的应用程序无法处理超时只会放弃并丢失所有数据......但这不是您暂停的应用程序的错误。)

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


1

Unix是一个时间共享操作系统,因此程序无论如何都不能独占访问CPU,它们与其他程序和操作系统本身共享。当您暂停程序时,您只是将时间延迟到下一个执行期。根据程序,即它是否像网络或视频播放软件一样对时间敏感,你可能会有超时,但基本上没有什么不好的事情发生。

关于在程序仍在“运行”时删除文件的第二个问题,请参阅问题“rm何时删除打开的文件?”


-1

基本上,它取决于程序。使用vim(1)(或使用vi(1))你甚至可以杀死它,即使整个系统崩溃,你也有可能在不丢失数据的情况下恢复文件,直到整个系统崩溃为止(看看在六(1) / VIM(1)手册页)

一般来说,停止一个程序五个小时可能会产生一些横向影响,可能会破坏你正在做的事情。

假设您打开的程序是网络客户端(例如与另一台机器的ssh(1)会话)通常,服务器激活一个名为SO_KEEPALIVE的TCP选项,即使您没有任何要说的内容,也可以保持连接处于活动状态。在这种情况下,它没有坏处,因为具有开放TCP连接的内核使得KEEPALIVE代表停止的进程(tcp连接是内核资源,而不是用户空间进程资源),并且您可以无限期地保持进程停止。

但是,如果服务器尝试发送一些数据并且客户端不承认它会发生什么。如果客户端长时间没有说出任何内容(或者服务器将所有数据缓冲区填充到客户端并且无法阻止),则应用程序协议可能会超时删除连接。在这种情况下,您将获得一个客户端尝试使用已经停止的连接(服务器消失)。

所以这个问题的答案是:一般来说没问题,但它完全取决于程序停止从环境中需要什么(它睡觉,但世界继续旋转)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.