【问题标题】:How to bind a key to sigkill in bash?如何在bash中将密钥绑定到sigkill?
【发布时间】:2008-12-04 08:25:53
【问题描述】:

我正在开发我的应用程序(在 Linux 上),遗憾的是它有时会挂起。我可以使用Ctrl+C 发送sigint,但我的程序忽略了sigint,因为它太远了。所以我必须做进程杀舞:

Ctrl+Z
$ ps aux | grep process_name
$ kill -9 pid

当我按下 -say -Ctrl+Shift+C 时,有没有办法配置 bash 向当前进程发送终止信号?

【问题讨论】:

    标签: linux bash sigkill


    【解决方案1】:

    我认为没有任何密钥可以用来发送 SIGKILL。

    SIGQUIT 会代替吗?如果你没有发现,默认是核心转储进程。默认情况下这是 ^\。你可以通过运行看到这一点:

    $ stty -a
    

    在终端中。它应该说:

    quit = ^\
    

    【讨论】:

    • 这是如何工作的?如果我正在编写一个新的终端应用程序,我应该知道这一点还是在较低级别处理?
    • 在内核的tty级别处理。当它看到退出键时,它会向该终端上的前台进程发送一个 SIGQUIT。如果你想停止它,你可以捕获 SIGQUIT,但按需核心转储非常有用。
    • 在这里,我就像一个新手一样,按 ^ 和 \ 无效。实际的按钮应该是 CTRL \ ... (至少在我的机器上)。
    【解决方案2】:

    您可以通过按 ^\ 向当前前台进程发送 SIGQUIT 信号(默认情况下,您可以运行 stty -a 以查看 quit 的当前值。)

    您还可以通过运行从 shell 中终止最后一个后台进程

    $ kill %%
    

    【讨论】:

      【解决方案3】:

      鉴于 SIGKILL 没有绑定键,如果 SIGQUIT 没有为您删除,您可以做的是创建一个别名来保存一些输入。一、

      Ctrl+Z
      $ ps aux | grep process_name
      $ kill -9 pid
      

      dance 可以概括为(如果您想要杀死的进程只有一个实例

      Ctrl+Z
      $ pkill -9 process_name
      

      如果你的用例总是先挂起然后杀死,你可以创建一个别名来杀死最后一个运行的进程

      $alias pks="pkill -9 !!:0"
      

      在您的 ~/.bash_profile 中添加该别名。

      【讨论】:

      • 取而代之的是,您可以使用 kill % 杀死最后一个作业
      • 在 linux 上,killall process_name 将杀死所有具有该名称的进程。注意:Solaris 和其他 unix 上的 killall 会杀死所有进程。
      猜你喜欢
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      相关资源
      最近更新 更多