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

2019-08-24 08:28:47 +08:00
 gIrl1990
比如: kill -9 29720
输出: killed pid 29720

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

2087 次点击
所在节点    问与答
17 条回复
AngelCriss
2019-08-24 08:36:26 +08:00
echo $?
watzds
2019-08-24 08:53:06 +08:00
不会立马分配这个老 id,linux 有这个机制的
lionseun
2019-08-24 08:54:22 +08:00
自己写个 alias 吧
vacua
2019-08-24 08:59:02 +08:00
…重复执行可太秀了…
linux 进程被杀死 pid 不会立刻分配给另外的新进程,进程被杀死不代表进程的所有资源立刻被回收,杀死和回收之间需要一定的时间,其次 pid 分配采取了延迟重用的算法,依次分配 32768 个 pid 号,目的就是为了减少出现你说的那种 pid 立刻被分配给了其他进程的情况,在这些手段之下出现你说的这种情况的概率真是微乎其微
KINGOD
2019-08-24 09:01:04 +08:00
不是,这个参数是向进程发送 signal。9 是 SIGKILL,杀进程。3 是 SIGQUIT,在 Android 上向一个进程发送 SIGQUIT,可以触发 dump 那个进程的 call stack。完整的 signal 列表可以查看 https://en.m.wikipedia.org/wiki/Signal_(IPC)
vimsucks
2019-08-24 09:19:54 +08:00
@KINGOD 楼主打错别字了,那—>哪
gIrl1990
2019-08-24 09:49:48 +08:00
@lionseun ??
@vacua @watzds soga 谢谢两位
@vimsucks 3q
gIrl1990
2019-08-24 09:58:04 +08:00
比如方向键向上,然后一个手快回车,然后执行了。
希望有个输出或者有个确认,这样就比较好了~
GjriFeu
2019-08-24 10:41:25 +08:00
我一般都是执行两遍确认进程被杀了
Isaac313
2019-08-24 11:28:48 +08:00
命令执行完拍多几个 1 和回车 (溜了溜了,)
KINGOD
2019-08-24 20:03:29 +08:00
那么 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
2019-08-24 20:09:13 +08:00
@KINGOD 还能配置 显示命令的 EXIT STATUS,怎么配置,求教程,来个链接什么的
gIrl1990
2019-08-24 20:24:54 +08:00
接上一条: 那可以配置展示 控制台输出的状态吗? 是错误输出还是正常输出。。
KINGOD
2019-08-24 21:42:03 +08:00
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
2019-08-24 22:54:38 +08:00
发信号并不确保效果啊
只管发不管埋的
gIrl1990
2019-08-24 23:49:35 +08:00
@KINGOD 退出码我是已经搞成可视化了,那控制台普通输出还是错误输出可否可视化?
KINGOD
2019-08-29 12:53:27 +08:00
@gIrl1990 你说的是 stdout 和 stderr 嘛?我没弄过,甚至没想到过,给这两个加样式。不过刚才顺手搜了下 terminal colored stdout stderr,发现有很多讨论,你可以用我的关键词自己搜一下相关资料。比如 https://serverfault.com/q/59262/431239
https://stackoverflow.com/q/6841143/1819810

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/594663

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX