这是命令序列,gedit启动,但不能从其进程 ID 中终止
$ gedit&
$ t=$!
$ echo $t
4824
$ kill $t
bash: kill: (4824) - No such process
Run Code Online (Sandbox Code Playgroud)
它适用于一个sleep过程,例如
sleep 999&
[1] 4881
$ t=$!
$ echo $t
4881
$ kill $t
$ ps -p $t
[1] Terminated sleep 999
Run Code Online (Sandbox Code Playgroud)
有什么不同?如何gedit终止进程?
我正在尝试一个简单的测试来从脚本内部杀死脚本。它似乎不起作用。
function testKill
{
PID=$$
kill $PID
echo hello!
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个函数时,
[....]$ testKill
hello!
Run Code Online (Sandbox Code Playgroud)
它显然不会终止进程。如何在发送 echo 命令之前使进程终止?
当我将这一切移到外部脚本中时,如果我直接从命令行调用脚本,它会正确终止。但是,如果我在 .bash_profile 中创建一个函数并从该函数中调用该脚本,则该脚本不会被终止,而是会打印出来。如何将其集成到我的 .bash_profile 中?
这是在更复杂的脚本中使用的最小工作示例。
不像 htop - top 对我来说更难,我想知道如何杀死 top 中的任何进程?在此先感谢我的 Stackoverflow 朋友!
我正在尝试将 SIGINT 信号发送到多个进程,我认为这是正确的:
kill -2 <pid1> <pid2> ... <pid3>
Run Code Online (Sandbox Code Playgroud)
但我无法确认...
我在前台运行一个应用程序,并通过点击CTRL+ Z(并停止)将其置于后台。为了让它重新运行,我运行了命令bg %1(这是它的 JOBSPEC)。
我想为什么不试着让它跑回来kill -CONT <PID>。所以,我跑去jobs -l获取它的 PID,并将这个 pid 与 kill 和 CONT 信号一起使用。
但是,该程序没有再次上线!jobs -l在用 CONT 尝试 kill 后报告它正在运行,但它不是(因为它是灰色的)。
我使用该命令查看了应用程序 PID ps,发现了两个具有不同 PID(和 status Tl)的相同命令。
然后我查看了使用相同的东西pstree,发现它们都在父进程下。父进程与列出的进程不同,jobs -l因为我放在后台的进程似乎启动了另一个程序。另一个程序似乎创建了子进程。
我注意到的总结如下:
使用kill将 CONT 发送到父进程使程序运行。
父进程 PID 与 报告的不同jobs -l。换句话说,我应该向其发送 CONT 信号的进程与我发现使用jobs -l.
向父进程发送 CONT 不会对子进程应用相同的信号。
使用该命令bg使进程返回运行状态,将 CONT 信号发送到父进程的所有子进程。
我的结论正确吗?如果是这样,那么这意味着使用该命令bg可以节省向每个相关进程发送 CONT 的时间。这是正确的吗?
编辑我从命令行调用并放在后台的主要应用程序是git …
有没有办法配置 Linux OOM Killer 来杀死父进程而不是子进程?当子进程被杀死时,父进程继续以不良状态运行。我可以检测子进程是否被杀死,然后退出,但我想知道是否有办法告诉 OOM 杀手杀死父进程而不是牺牲子进程。
我想kill --verbose ...在 bash 脚本中使用,但出现错误kill: -verbose: invalid signal specification。这很奇怪,因为它在鱼中工作得很好。我的调查使我出现了这种奇怪的行为:
$ which kill
/usr/bin/kill
$ sleep 5 & kill --verbose $!
[1] 33730
bash: kill: -verbose: invalid signal specification
... wait for sleep to finish ...
[1]+ Done sleep 5
$ sleep 5 & /usr/bin/kill --verbose $!
[1] 33964
sending signal 15 to pid 33964
[1]+ Terminated sleep 5
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事?为什么不kill识别--verbose标志,但是/usr/bin/kill当which kill==时可以识别/usr/bin/kill?
如果我想根据其 tcp 端口号或其文件或命名的可执行文件停止程序,我可以运行类似kill -tcpPortNumber $1参数$1为 tcp 端口号或kill -filename $1参数为文件名的程序吗?背景是以下问题中的一个问题:
这个问题在实践中确实发生过,我认为用户 Bepetersn 有一个看起来像我的意思的解决方案。 sudo kill $(fuser -n tcp <port_number> 2> /dev/null)
但是我想要实现的是,kill 程序可以将 tcp 端口号和/或文件名作为任何用户(包括 sudo)的系统范围参数。那么是否可以将系统范围内的参数添加到像 kill 这样的系统程序中,以便 tcp 端口号和/或文件名可以作为参数,并且这种更改对于包括 ubuntu sudo 在内的任何用户都是永久性的?
有时我需要通过终端快速结束一个进程,但只是输入ps -e | grep firefox然后一直终止是很乏味的。我想alias在我的 .bashrc 中创建一个并输入killfirefox
我想这会做到,但我并不真正了解一切。
所以我知道要么ps -e | grep firefox | sudo awk '{print $1}'
或pgrep firefox将返回我需要杀死进程的firefox的pid。我认为这可以完成这项工作:
pgrep firefox | sudo awk '{kill $1}'但它不起作用。它什么也没说,Firefox 仍在运行。然后我尝试了pgrep firefox | sudo awk '{system(sudo kill $1)}'但后来它返回“sh:1:27762:未找到”。
为什么我的方法不行?怎么了?
kill <pid>和之间究竟有什么区别kill -s TERM <pid>。最初我认为该$TERM变量包含一个信号编号,但是当我回显 TERM 时,它给了我
$echo $TERM
xterm-256color
Run Code Online (Sandbox Code Playgroud)