怎样实现按下ctrl+z后自动解除锁?

怎样实现按下ctrl+z后自动解除锁?

apt-get由于某种原因,我们通过按ctrl+来终止包的安装,它会在内部和目录z中创建一个锁文件。/var/lib/dpkg//var/cache/apt/archives/

之后,如果我们想通过安装另一个或相同的包apt-get,我们必须通过运行这两个命令手动删除锁sudo rm /var/lib/dpkg/locksudo rm /var/cache/apt/archives/lock这样安装才会发生。

我的问题:有没有办法可以自动删除按ctrl+后创建的锁文件z,这样我们就不需要手动删除锁文件了。

答案1

不,

因为程序不可能捕获 SIGSTOP (由Ctrl+发送Z

引用相关部分signal(7)手册页图标

信号 值 动作 注释
────────────────────────────────────────────────
停止信号   17,19,23 停止 停止进程

信号终止信号停止信号无法被捕获、阻止或忽略。

Ctrl因此,如果您使用+停止程序Z并关闭终端,它就没有机会执行清理(例如:删除锁定文件)。如果您打算取消操作,则不应使用
Ctrl+ ,仅当您打算Z暂停一个程序并稍后恢复它(或干净地关闭它)。

因此,应该使用Ctrl+C来终止进程,因为程序可以捕获该信号并干净地退出。

但是,在 的情况下apt-get,按Ctrl+C会保留锁定文件,但会终止进程。这意味着可以删除锁定文件,但如果您在关键点终止它,包管理器可能会处于不一致的状态。

apt-get在安装/更新软件包时,确实没有安全的选项可以干净地终止,但是在下载时取消(Ctrl-C,然后删除锁定文件)应该没问题。

答案2

切勿手动删除锁。为什么?

最好的方法是恢复进程而不是删除锁。创建的锁确保没有其他 apt 实例同时运行。

Ctrl+Z暂停进程。要将其返回到前台并继续执行,请输入

fg

这将允许 apt 继续执行并完成进程。要停止执行 apt,您需要使用Ctrl+将其终止C。这也会删除锁定。

也可以看看:

相关内容