AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[kill](unix)

Martin Hope
Fadeway
Asked: 2024-05-21 18:22:12 +0800 CST

无条件终止进程的正确方法是什么?

  • 9

我有两个热键用于交互式查找和终止 Linux 上的进程:

bindsym $mod+k exec --no-startup-id \
    "ps axo pid,cmd | sed 1d | dmenu -i -l 20 | awk '{print $1}' | xargs kill"
bindsym $mod+$sh+k exec --no-startup-id \
    "ps axo pid,cmd | sed 1d | dmenu -i -l 20 | awk '{print $1}' | xargs -s SIGSEGV kill"

第二个热键是针对无响应目标的“更努力”版本。这里使用什么信号最合适?这似乎是一种滥用,SIGSEGV因为没有潜在的分段错误。

信号(2)说

信号 SIGKILL 和 SIGSTOP 无法被捕获或忽略

SIGKILL但根据我的经验,无响应的进程在死亡时存活下来是很常见的SIGSEGV。

无情地终止进程的“最不错误”的方法是什么?

kill
  • 1 个回答
  • 316 Views
Martin Hope
Marc Le Bihan
Asked: 2023-08-20 14:59:05 +0800 CST

我希望使用“sytemctlkilllogstash.service”来终止服务,但服务收到的是 SIGTERM,而不是 SIGKILL。如何发送 SIGKILL?

  • 6

我正在使用的新logstash版本无法停止,一直尝试连接到Elastic,而它却不能(身份验证问题,我稍后会解决)。

asudo systemctl stop logstash.service不足以阻止它,所以我发出了 a sudo systemctl kill logstash.service。

但这也无法阻止它。

显示sudo system status logstash.service:

lebihan@debian:~$ sudo systemctl kill logstash.service

lebihan@debian:~$ sudo systemctl status logstash.service
● logstash.service - logstash
     Loaded: loaded (/lib/systemd/system/logstash.service; disabled; preset: enabled)
     Active: deactivating (stop-sigterm) since Sun 2023-08-20 07:51:21 CEST; 1h 4min ago
   Main PID: 47926 (java)
      Tasks: 176 (limit: 76997)
     Memory: 1.6G
        CPU: 28min 605ms
     CGroup: /system.slice/logstash.service
             └─47926 /usr/share/logstash/jdk/bin/java -Xms1g -Xmx1g -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djruby.compile.invokedynamic=true -XX:+HeapDumpOnOutOfMemoryError -Djava.security.eg>

août 20 08:55:36 debian logstash[47926]: [2023-08-20T08:55:36,702][WARN ][logstash.outputs.elasticsearch][main] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"http://l>
août 20 08:55:41 debian logstash[47926]: [2023-08-20T08:55:41,704][WARN ][logstash.outputs.elasticsearch][main] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"http://l>
août 20 08:55:42 debian systemd[1]: logstash.service: Sent signal SIGTERM to main process 47926 (java) on client request.
août 20 08:55:42 debian logstash[47926]: [2023-08-20T08:55:42,326][WARN ][logstash.runner          ] SIGTERM received. Shutting down.
août 20 08:55:46 debian logstash[47926]: [2023-08-20T08:55:46,706][WARN ][logstash.outputs.elasticsearch][main] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"ht

为什么我不systemctl kill发送 SIGKILL 事件,而是发送 SIGTERM 事件?
如何使用 向我的服务发送 SIGKILL 以强制其停止systemctl?

kill
  • 1 个回答
  • 9 Views
Martin Hope
MathMan
Asked: 2022-06-25 04:24:38 +0800 CST

将 -exec 与 kill 命令一起使用

  • 0

我正在尝试执行以下命令,其中我使用了 kill 和 exec 命令。

kill -l -exec grep -i 'term' {} +

因为, kill -l 返回所有终止信号的列表,我想使用 grep 和不区分大小写的 -i 标志来查找所有包含单词“term”的信号。但是,它返回以下错误。有人可以建议为什么会这样吗?

-bash: kill: grep: invalid signal specification
-bash: kill: -i: invalid signal specification
15
-bash: kill: {}: invalid signal specification
-bash: kill: +: invalid signal specification
grep kill
  • 2 个回答
  • 50 Views
Martin Hope
Manuel Jordan
Asked: 2022-05-18 10:23:17 +0800 CST

何时强制以编程方式发送 SIGINT?

  • 0

我知道终止前台进程的推荐方法是通过SIGTERM信号,因为它为进程本身提供了清理/释放资源的机会。该信号只能通过命令生成/发送,它可以通过任何kill pkill killall命令 - 直到这里我没问题。此外,它是这些命令的默认信号。

现在,我知道SIGINT信号中断了一个过程。因此“相似”为terminate。

但是我从以下内容中阅读了以下答案(摘录):

  • SIGINT 与 SIGTERM、SIGQUIT 和 SIGKILL 等其他终止信号有何关系?

SIGINT并且SIGQUIT专门用于来自终端的请求:可以分配特定的输入字符来生成这些信号(取决于终端控制设置)。的默认操作与 的默认操作和不可更改的操作相同的进程终止;SIGINTSIGTERMSIGKILL

直到这里根据答案是由组合键 ( + )SIGINT触发并且理论上与 相同,它即将:给程序本身清理/释放资源的机会。ctrlc SIGINTSIGTERM

老实说,在阅读了许多教程之后,我无法明确地找到并确认该信息。例如来自:

  • signal(7) — Linux 手册页
  • 24.2.2 终止信号

在许多地方,这些信号都使用了中断和终止术语。

此外,从相同的答案存在@Jonathan Leffler的评论(摘录)为:

这是关键点:SIGINT并且SIGQUIT可以在程序运行时从终端使用单个字符生成。其他信号必须由另一个程序以某种方式(例如通过kill命令)生成。SIGINT不那么暴力SIGQUIT;后者产生核心转储

直到这里作为一个可能的结论:SIGINT可以通过组合键或命令触发,并且SIGTERM只能通过命令触发。

这篇文章的原因:如果理论上 SIGINT是一样的SIGTERM

问题

  • 何时以SIGINT编程方式强制发送?

它出现在 中kill -l,所以可以使用它。

额外问题

同样,如果理论上 SIGINT与SIGTERM- 相同,则两者都可以忽略/阻止/处理

  • 为什么被创建SIGINT?
  • 为什么ctrl+c没有从一开始就分配给SIGTERM?

老实说,我认为这SIGINT是不安全的,因为它会中断进程,因此会使一些数据处于不一致/完整的状态

kill signals
  • 2 个回答
  • 308 Views
Martin Hope
Manuel Jordan
Asked: 2022-05-18 07:14:40 +0800 CST

通过“kill”命令发送信号名称的正确或建议方法是什么?

  • 6

我阅读了很多关于kill命令使用的教程,主要是3 种方法

kill -15 <pid>
kill -SIGTERM <pid>
kill -TERM <pid>

出于脚本目的和 macos 的可移植性,将不会使用代码编号。因为kill -l在 macos 中与 Linux 不同。所以在这里输入信号名称。

问题

  • 通过命令发送信号名称的正确或建议方法是什么?kill

我是说:

  • SIG什么或什么?

为什么?这两种方法的存在是有原因的,对吧?是否有强制理由使用一种方法而不是另一种方法?

环境

这种情况适用于 Ubuntu Desktop/Server 和 Fedora Workstation/Server

linux kill
  • 1 个回答
  • 543 Views
Martin Hope
Manuel Jordan
Asked: 2022-05-17 09:19:10 +0800 CST

为什么 kill、killall 和 pkill 的信号列表不一样?

  • 4

我研究了kill,pkill和killall命令,我理解了它们的大部分区别。但是,我对他们的信号感到困惑:

如果我运行kill -l,我会看到:

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

但是pkill -l给出:

pkill: invalid option -- 'l'

Usage:
 pkill [options] <pattern>

Options:
 -<sig>, --signal <sig>    signal to send (either number or name)
 -e, --echo                display what is killed
 -c, --count               count of matching processes
 -f, --full                use full process name to match
 -g, --pgroup <PGID,...>   match listed process group IDs
 -G, --group <GID,...>     match real group IDs
 -i, --ignore-case         match case insensitively
 -n, --newest              select most recently started
 -o, --oldest              select least recently started
 -P, --parent <PPID,...>   match only child processes of the given parent
 -s, --session <SID,...>   match session IDs
 -t, --terminal <tty,...>  match by controlling terminal
 -u, --euid <ID,...>       match by effective IDs
 -U, --uid <ID,...>        match by real IDs
 -x, --exact               match exactly with the command name
 -F, --pidfile <file>      read PIDs from file
 -L, --logpidfile          fail if PID file is not locked
 --ns <PID>                match the processes that belong to the same
                           namespace as <pid>
 --nslist <ns,...>         list which namespaces will be considered for
                           the --ns option.
                           Available namespaces: ipc, mnt, net, pid, user, uts

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see pgrep(1).

即使没有信号列表,此命令也支持/使用信号,只需在前面出现的输出中查看

-<sig>, --signal <sig>    signal to send (either number or name)

最后,killall -l返回:

HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS

问题

  • 为什么 和 的信号列表不kill一样?killallpkill

我假设pkill并且killall应该显示相同的输出kill -l- 乍一看,它似乎pkill不支持信号。

环境:

对于 Ubuntu Server 18:04、20:04 和 Fedora Workstation 36,我遇到了这种情况

linux kill
  • 3 个回答
  • 1077 Views
Martin Hope
Taycano
Asked: 2022-04-07 10:35:26 +0800 CST

带有 while 循环的 Bash 脚本,它等待文件被刷新,但如果超过时间阈值则终止

  • 0

我对 bash 非常了解,所以如果这很明显可以解决,我深表歉意,如果需要更多详细信息,请告诉我。下面的脚本是启动 python 工作流并等待在工作流结束时更新 results.json 文件的较大脚本的一部分。

我试过用

{
    sleep 1m
    kill $$
}&

但这会在 results.json 文件在 1 分钟内刷新时生成错误:

杀死:(90015) - 没有这样的过程

这是脚本:

#! /bin/bash
export DISPLAY=:0.0

export outputfile=results.json

if [[ ! -e $outputfile ]]; then
    touch $outputfile
fi

OldTimestamp=$(date -r $outputfile)

{
    sleep 1m
    kill $$
}&

NewTimestamp=$OldTimestamp; 
while [ "$NewTimestamp" = "$OldTimestamp" ]; do 
   sleep 0.1
   NewTimestamp="$(date -r $outputfile)" 
done
bash kill
  • 2 个回答
  • 241 Views
Martin Hope
alle_meije
Asked: 2022-02-17 00:27:16 +0800 CST

killall firefox 不会杀死 firefox

  • 2

当我打开大量 Firefox 窗口并想快速关闭它们时,我确实
killall firefox
使用了 Ubuntukillall中的psmisc软件包。

没啥事儿。

我查看了我的流程列表,表格中有很多行

alle_meije     55061    7662  0 01:16 ?        00:00:31 /usr/lib/firefox/firefox -contentproc -childID 126 -isForBrowser -prefsLen 9704 -prefMapSize 254479 -jsInitLen 279340 -parentBuildID 20220106144528 -appDir /usr/lib/firefox/browser 7662 true tab

因此,firefox作为那里的可执行文件的“基本名称”,我原以为这些会被杀死。

果然,手动使用
kill $( ps -fu $USER | grep firefox | awk '{print $2}' )
确实关闭了所有这些窗口。有谁知道为什么不会发生同样的情况killall?

firefox kill
  • 2 个回答
  • 205 Views
Martin Hope
Michael
Asked: 2022-02-16 11:40:33 +0800 CST

Linux上的Ctrl-Alt-Del等效?[复制]

  • 32
这个问题在这里已经有了答案:
Linux 桌面死机时该怎么办? (9 个回答)
8 个月前关闭。

我愚蠢地开始了一份工作,结果变得如此庞大和忙碌,以至于一切都冻结了。我希望我可以键入一个 kill 命令或使用 xkill,但系统没有响应,除了声音交换。在 Windows 上,Ctrl-Alt-Del 在这些情况下会有所帮助;Linux 有办法进入过载的系统吗?

刚看到这个,忍不住分享:

xkcd:和弦键盘

centos kill
  • 5 个回答
  • 5353 Views
Martin Hope
xpt
Asked: 2021-10-26 13:26:16 +0800 CST

如何在Linux下杀死chrome以便下次恢复

  • 0

如何chrome在 Linux 下杀死,以便下次启动时恢复/恢复会话?

在 Windows 下这是一件微不足道的事情,但在 Linux 下,无论我如何尝试 kill chrome,在下次启动时,它都会忘记所有旧会话,就好像什么都没发生一样。

kill chrome
  • 1 个回答
  • 318 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve