首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
宝塔
V2EX  ›  问与答

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

  •  
  •   gIrl1990 · 85 天前 · 983 次点击
    这是一个创建于 85 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如: kill -9 29720
    输出: killed pid 29720
    

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

    第 1 条附言  ·  85 天前
    错字: 那个参数 -> 哪个参数
    第 2 条附言  ·  85 天前

    相关命令:

    pgrep -af "pattern"
    pkill -9 -ef "pattern"
    
    17 回复  |  直到 2019-08-29 12:53:27 +08:00
        1
    AngelCriss   85 天前 via Android
    echo $?
        2
    watzds   85 天前 via Android
    不会立马分配这个老 id,linux 有这个机制的
        3
    lionseun   85 天前 via Android
    自己写个 alias 吧
        4
    vacua   85 天前 via Android
    …重复执行可太秀了…
    linux 进程被杀死 pid 不会立刻分配给另外的新进程,进程被杀死不代表进程的所有资源立刻被回收,杀死和回收之间需要一定的时间,其次 pid 分配采取了延迟重用的算法,依次分配 32768 个 pid 号,目的就是为了减少出现你说的那种 pid 立刻被分配给了其他进程的情况,在这些手段之下出现你说的这种情况的概率真是微乎其微
        5
    KINGOD   85 天前 via Android
    不是,这个参数是向进程发送 signal。9 是 SIGKILL,杀进程。3 是 SIGQUIT,在 Android 上向一个进程发送 SIGQUIT,可以触发 dump 那个进程的 call stack。完整的 signal 列表可以查看 https://en.m.wikipedia.org/wiki/Signal_(IPC)
        6
    vimsucks   85 天前 via Android
    @KINGOD 楼主打错别字了,那—>哪
        7
    gIrl1990   85 天前
    @lionseun ??
    @vacua @watzds soga 谢谢两位
    @vimsucks 3q
        8
    gIrl1990   85 天前
    比如方向键向上,然后一个手快回车,然后执行了。
    希望有个输出或者有个确认,这样就比较好了~
        9
    GjriFeu   85 天前 via iPhone
    我一般都是执行两遍确认进程被杀了
        10
    Isaac313   85 天前 via Android
    命令执行完拍多几个 1 和回车 (溜了溜了,)
        11
    KINGOD   84 天前
    那么 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。
        12
    gIrl1990   84 天前
    @KINGOD 还能配置 显示命令的 EXIT STATUS,怎么配置,求教程,来个链接什么的
        13
    gIrl1990   84 天前
    接上一条: 那可以配置展示 控制台输出的状态吗? 是错误输出还是正常输出。。
        14
    KINGOD   84 天前
    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
        15
    julyclyde   84 天前
    发信号并不确保效果啊
    只管发不管埋的
        16
    gIrl1990   84 天前
    @KINGOD 退出码我是已经搞成可视化了,那控制台普通输出还是错误输出可否可视化?
        17
    KINGOD   80 天前 via Android
    @gIrl1990 你说的是 stdout 和 stderr 嘛?我没弄过,甚至没想到过,给这两个加样式。不过刚才顺手搜了下 terminal colored stdout stderr,发现有很多讨论,你可以用我的关键词自己搜一下相关资料。比如 https://serverfault.com/q/59262/431239
    https://stackoverflow.com/q/6841143/1819810
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2230 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 07:35 · PVG 15:35 · LAX 23:35 · JFK 02:35
    ♥ Do have faith in what you're doing.