如何阻止进程在 bash 中执行

如何阻止进程在 bash 中执行

已输入以下命令:

sleep 12h; nuke-russia

它是在 Debian 的一个tty终端上输入的。我想取消睡眠而不删除任何东西。我不想让 nuke 命令运行哪怕一刻。我还有其他五个终端可用。我该怎么办?

答案1

将来,尝试使用&&而不是;
sleep X && echo bla按 ctrl + C 将停止睡眠并且不会回显 bla

如果可行,您可以重命名负责的二进制文件。这样,bash 将无法执行,nuke-russia因为它不存在。

其他解决方案是杀死负责的 shell

编辑:
如何找到负责 shell 的 PID(应该是它的父级)
如果 pidsleep 12h是 1234 ,则使用 kill -9
查找负责的 shellps -o ppid= 1234

答案2

  1. 寻找nuke-russia
  2. 重命名old-nuke-russia
  3. 在同一目录中创建一个ls名为“嗯哼……”的链接nuke-russia

让休眠命令按其意愿运行。您有 12 小时的时间来找到运行该命令的人,并以试图引发世界大战的罪名将其绞死。

答案3

显然

kill -s SIGHUP [pid]

应该彻底终止该终端会话并有效地挂断该会话。

因此,与其他答案一样,命令ps -ef | grep sleep应该可以让您获得pid需要发送的信号。

-=编辑=-

kill标志-s告诉命令我想要指定要使用的信号,在我的情况下是SIGHUP。

为了阐明我为什么选择建议使用kill -s SIGHUP [pid](或ppid按照 peth 的建议),我将寻求以下帮助维基百科其中指出:

在 POSIX 兼容平台上,SIGHUP 是当进程的控制终端关闭时发送给进程的信号。(它最初设计用于通知进程串行线路断开)。SIGHUP 是在头文件 signal.h 中定义的符号常量。

...

随着通过串行线路访问的减少,SIGHUP 的含义在现代系统上发生了一定的变化,通常意味着控制伪终端或虚拟终端已关闭。

我发现很多程序在其终端被终止后也会完全终止,我相信 bash shell(运行 sleep 命令)在这种情况下也不会有什么不同。

答案4

在另一个终端上以root用户身份登录。

找到 nuke-russia 脚本(或命令)并将其重命名为其他名称,然后...

[root@mysvr ~]# ps -ef | grep sleep
root      1362  1338  0 17:23 pts/0    00:00:00 sleep 12h
root      1393  1367  0 17:24 pts/1    00:00:00 grep sleep

从列表中选择正确的睡眠命令(如果多于一个)并记下它的 PID 号 - 在我的情况下,它是 1362

输入命令:kill -9 [PID]例如:kill -9 1362

相关内容