![怎样实现按下ctrl+z后自动解除锁?](https://linux22.com/image/1118587/%E6%80%8E%E6%A0%B7%E5%AE%9E%E7%8E%B0%E6%8C%89%E4%B8%8Bctrl%2Bz%E5%90%8E%E8%87%AA%E5%8A%A8%E8%A7%A3%E9%99%A4%E9%94%81%EF%BC%9F.png)
apt-get
由于某种原因,我们通过按ctrl+来终止包的安装,它会在内部和目录z中创建一个锁文件。/var/lib/dpkg/
/var/cache/apt/archives/
之后,如果我们想通过安装另一个或相同的包apt-get
,我们必须通过运行这两个命令手动删除锁sudo rm /var/lib/dpkg/lock
,sudo 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。这也会删除锁定。
也可以看看: