gIrl1990
V2EX  ›  问与答

Linux /macos kill 那个参数是用来显示结果的?

  •  
  •   gIrl1990 · Aug 24, 2019 · 3303 views
    This topic created in 2631 days ago, the information mentioned may be changed or developed.
    比如: kill -9 29720
    输出: killed pid 29720
    

    我生怕一个回车重复执行,杀了 pid 重新分配的另一个进程

    Supplement 1  ·  Aug 24, 2019
    错字: 那个参数 -> 哪个参数
    Supplement 2  ·  Aug 24, 2019

    相关命令:

    pgrep -af "pattern"
    pkill -9 -ef "pattern"
    
    17 replies  •  2019-08-29 12:53:27 +08:00
    AngelCriss
    AngelCriss
    Aug 24, 2019 via Android
    1
    echo $?
    watzds
    watzds
    Aug 24, 2019 via Android
    2
    不会立马分配这个老 id,linux 有这个机制的
    lionseun
    lionseun
    Aug 24, 2019 via Android
    3
    自己写个 alias 吧
    vacua
    vacua
    Aug 24, 2019 via Android
    4
    …重复执行可太秀了…
    linux 进程被杀死 pid 不会立刻分配给另外的新进程,进程被杀死不代表进程的所有资源立刻被回收,杀死和回收之间需要一定的时间,其次 pid 分配采取了延迟重用的算法,依次分配 32768 个 pid 号,目的就是为了减少出现你说的那种 pid 立刻被分配给了其他进程的情况,在这些手段之下出现你说的这种情况的概率真是微乎其微
    KINGOD
    KINGOD
    Aug 24, 2019 via Android
    5
    不是,这个参数是向进程发送 signal。9 是 SIGKILL,杀进程。3 是 SIGQUIT,在 Android 上向一个进程发送 SIGQUIT,可以触发 dump 那个进程的 call stack。完整的 signal 列表可以查看 https://en.m.wikipedia.org/wiki/Signal_(IPC)
    vimsucks
    vimsucks
    Aug 24, 2019 via Android
    6
    @KINGOD 楼主打错别字了,那—>哪
    gIrl1990
    gIrl1990
    OP
    Aug 24, 2019
    7
    @lionseun ??
    @vacua @watzds soga 谢谢两位
    @vimsucks 3q
    gIrl1990
    gIrl1990
    OP
    Aug 24, 2019
    8
    比如方向键向上,然后一个手快回车,然后执行了。
    希望有个输出或者有个确认,这样就比较好了~
    GjriFeu
    GjriFeu
    Aug 24, 2019 via iPhone
    9
    我一般都是执行两遍确认进程被杀了
    Isaac313
    Isaac313
    Aug 24, 2019 via Android
    10
    命令执行完拍多几个 1 和回车 (溜了溜了,)
    KINGOD
    KINGOD
    Aug 24, 2019
    11
    那么 1 楼就是正确答案了,$? 代表上一个 shell 命令的返回值。0 代表信号已经发送给对应的进程了。

    man pkill:
    EXIT STATUS
    0 One or more processes matched the criteria.
    1 No processes matched.
    2 Syntax error in the command line.
    3 Fatal error: out of memory etc.

    如果用 oh-my-zsh 的默认主题,可以直观看到上一个命令返回的是不是 0 (表现在 PS1 开头那个箭头是绿还是红)。
    或者自己特意配置过 bash 的 PS1,也能看出来。

    执行一次,返回 0,说明信号发过去了。再执行一次,这个进程号就找不到了,会返回非 0。
    gIrl1990
    gIrl1990
    OP
    Aug 24, 2019
    12
    @KINGOD 还能配置 显示命令的 EXIT STATUS,怎么配置,求教程,来个链接什么的
    gIrl1990
    gIrl1990
    OP
    Aug 24, 2019
    13
    接上一条: 那可以配置展示 控制台输出的状态吗? 是错误输出还是正常输出。。
    KINGOD
    KINGOD
    Aug 24, 2019
    14
    0. Linux 不可能把刚杀的进程号分给刚建的新进程,其实最初的问题不用担心。
    至于 显示命令的 EXIT STATUS,

    1. 最简单的还是 3 楼的方法,写个 function,调用自定义的 kill 时,实际调用
    pkill $1 ; echo $?

    或者
    pkill $1 && echo "signal sent"
    # 当 pkill $1 返回 true 时,才执行 && 后面的 echo

    2. 装个 shell 配置管理工具,我用的这个。
    https://github.com/robbyrussell/oh-my-zsh
    https://github.com/Bash-it/bash-it
    默认 theme 一般都有 $?

    3. 手动修改 PS1 环境变量
    PS1 这个变量,是控制命令提示符的样式的。可以改颜色、加 $?、加日期时间等。不过我也只是知道这么多,自己没改过。你可以搜搜 PROMPT_COMMAND 关键字,把自己写的函数的返回值赋到 PS1,比写 PS1=... 的 one-liner 会容易些。
    主要可以参考 ArchWiki 文档 https://wiki.archlinux.org/index.php/Bash/Prompt_customization#Visualizing_exit_codes
    julyclyde
    julyclyde
    Aug 24, 2019
    15
    发信号并不确保效果啊
    只管发不管埋的
    gIrl1990
    gIrl1990
    OP
    Aug 24, 2019
    16
    @KINGOD 退出码我是已经搞成可视化了,那控制台普通输出还是错误输出可否可视化?
    KINGOD
    KINGOD
    Aug 29, 2019 via Android
    17
    @gIrl1990 你说的是 stdout 和 stderr 嘛?我没弄过,甚至没想到过,给这两个加样式。不过刚才顺手搜了下 terminal colored stdout stderr,发现有很多讨论,你可以用我的关键词自己搜一下相关资料。比如 https://serverfault.com/q/59262/431239
    https://stackoverflow.com/q/6841143/1819810
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5624 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 02:32 · PVG 10:32 · LAX 18:32 · JFK 21:32
    ♥ Do have faith in what you're doing.