我正在使用 SRM 删除一个文件。SRM 已经花了 12 个小时删除一个 7GB 的文件,但它只获得了 3 颗星 ***
有什么办法可以停止或暂停它,以便我改日再做这件事。
答案1
终止命令行/文本模式程序的速成课程
详细说明@AFH 的评论,如果“SRM”是一个控制台(命令行界面)程序,并且您已从终端运行它,则只需点击Ctrl-z
,因为这会使您的终端向它管理的前台进程发送该SIGSTOP
信号并将其发送到后台。然后,您可以通过执行 shell 命令“将其带回” fg
- 它是交互式 shell 实现的所谓“作业控制”的一部分,意味着将后台进程带到前台(因此是“fg”),其中包括向进程发送信号SIGCONT
等。
当然,要停止进程,只需停止它即可。在 Unix 系统(包括基于 Linux 的操作系统)上,这是通过向进程发送特殊信号之一(通常SIGTERM
是 或 )来实现的SIGINT
。Ctrl-c
在运行进程的终端中点击 会使 向进程发送信号SIGINT
。该kill
程序可用于向任意进程发送任意信号。
使用的问题kill
在于,对于大多数用途,它要求用户知道要向其发送信号的进程的所谓“PID”。PID 是一个磷流程IDentifier—一个≥1的整数,在操作系统当前管理的所有进程中都是唯一的。
shell 的作业控制使其更容易,因为它具有某些助记符来引用它管理的进程:如果您通过点击 来将当前活动进程置于后台Ctrl-z
,则可以使用该jobs
命令查看该 shell 管理的进程列表。例如,我刚刚暂停了一个实例,然后mutt
运行jobs
它;这是我看到的:
~$ jobs
[1]+ Stopped mutt
注意那位[1]+
。1
是 shell 分配给该进程的作业标识符。 是+
用于引用最后一个后台进程的“句柄”。
因此,您现在可以使用%1
或%+
与kill
命令一起引用该进程,例如
$ kill %1
或者
$ kill %+
...并且它们都将发送SIGTERM
到那个单独的后台进程。
这就是你可以终止行为不端的控制台程序的方法。
有关信号的更多信息请注意,这些SIGINT
和SIGTERM
信号可以由接收其中一个的进程“处理”。这允许进程在退出之前执行某些清理操作。
但有时进程可能会“挂起”——例如由于编程错误导致 CPU 执行无限循环,或者尝试读取/写入某些“死”资源(例如断开连接的网络共享)上的文件时卡住。在这些情况下,交付SIGINT
或SIGTERM
通常无法“解除”进程。
为了处理这种情况,存在一个特殊信号,SIGQUIT
它被分配了一个众所周知的数字“9”。向进程发送此信号只会让操作系统强制删除该进程,而它没有机会进行干预。这就是为什么您很可能kill -9 $pid
在某些文档中看到这个咒语的原因。
其他选择
当然还有其他选择。
首先,存在“用户友好”的程序,例如,htop
它们为您提供可搜索的正在运行的进程列表,并允许您向其中任何一个进程发送选择的信号。
图形桌面环境(例如 GNOME、XFCE、KDE 等)通常提供 GUI 应用程序来执行相同操作。
其次,当“任务管理器”不可用或由于某种原因无法满足要求时,存在更多“黑客”方法来处理行为不端的进程。以下是其中一些方法(无特定顺序):
该
xkill
实用程序(在 Debian 及其衍生产品中,它位于x11-utils
包中)在运行时会显示一个对角十字形光标,您可以通过单击该光标来选择任何窗口,并将xkill
强制断开拥有该窗口的进程与 X 服务器(呈现所有 GUI 的程序)的连接。此操作的效果在不同进程之间有所不同,但如果您是
xkill
一个终端窗口,它会SIGHUP
向它管理的进程发送信号,这通常会使它们退出。该
pkill
实用程序(在 Debian 及其衍生软件包中procps
)可用于向名称与特定字符串匹配的一组进程发送信号。因此,如果你想要终止
srm
系统上运行的进程,你可以运行$ pkill -9 srm
关闭srm
系统上运行的所有名为 的进程。
答案2
真正的答案是这里
TL;DR 使用现代磁盘(包括任何可以容纳 7GB 文件的磁盘),您实际上不需要那么偏执。
因为您只需要用零覆盖您的文件:
shred -n 0 -z trashed.dat
- 意味着
-n 0
使用随机数据传递 0 次(如果没有,您将获得使用随机数据的默认 3 次传递,但这仍然是过度的) -z
最后用零进行一次传递(唯一需要的一次)
鉴于此,为了有效地完成安全擦除:
- 停止当前命令
- 运行
shred
上面的命令
(为突然的业力下降做好准备……)