我有一个无法杀死的进程kill -9 <pid>
。在这种情况下有什么问题,特别是因为我是该流程的所有者。我认为没有什么可以逃避这个kill
选择。
我正在我的 Ubuntu 系统上安装 hadoop。当我启动它时,它报告端口 9000 繁忙。
我用了:
netstat -nlp|grep 9000
Run Code Online (Sandbox Code Playgroud)
看看这样的端口是否存在,我得到了这个:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能得到持有它的进程的 PID?
有时我想开始一个过程并忘记它。如果我从命令行启动它,就像这样:
redshift
Run Code Online (Sandbox Code Playgroud)
我无法关闭终端,否则它会终止进程。我可以以可以关闭终端而不终止进程的方式运行命令吗?
我想要一个这样的shell脚本:
my-app &
echo $my-app-pid
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何获取刚刚执行的命令的pid。
我知道我可以只使用jobs -p my-app
命令来grep pid。但是如果我想多次执行shell,这个方法就行不通了。因为工作规范是不明确的。
当我在本地工作时,我已经在远程机器上运行了一个脚本。我可以以同一用户身份通过 SSH 连接到机器,并查看在ps
.
$ ps aux | grep ipcheck
myuser 18386 0.0 0.0 18460 3476 pts/0 S+ Dec14 1:11 /bin/bash ./ipchecker.sh
Run Code Online (Sandbox Code Playgroud)
它只是在本地会话上输出到标准输出(我从./ipchecker.sh
本地终端窗口运行,没有重定向,没有使用screen
等)。
无论如何,我可以从 SSH 会话中查看此运行命令的输出(不停止它)吗?
到目前为止,我发现的最好的方法是使用,strace -p 18386
但我在屏幕上看到成群的文本,它太详细了。我可以停下来strace
,然后筛选输出,发现文本带打印到标准输出,但它非常长且令人困惑,很明显,当它停止时,我可能会错过一些东西。我想找到一种方法来实时查看脚本输出,就像我在本地工作一样。
任何人都可以改进吗?显而易见的答案是通过重定向或在screen
会话等中重新启动脚本,这不是关键任务脚本,所以我可以这样做。相反,我认为这是一个有趣的学习练习。
我已经在后台使用&
. 突然停止下载。我想终止它的进程,然后重新运行命令。我怎样才能终止它?
我还没有关闭它的外壳窗口。但正如你所知,它不会停止使用Ctrl+C和Ctrl+ Z。
我想实时监控一个进程的内存/cpu 使用情况。类似于top
但仅针对一个过程,最好带有某种历史图表。
在 ps xf
26395 pts/78 Ss 0:00 \_ bash
27016 pts/78 Sl+ 0:04 | \_ unicorn_rails master -c config/unicorn.rb
27042 pts/78 Sl+ 0:00 | \_ unicorn_rails worker[0] -c config/unicorn.rb
Run Code Online (Sandbox Code Playgroud)
在 中htop
,它显示为:
为什么 htop 显示的进程比 ps 多?
可以使用哪些命令来找出正在运行的进程的当前工作目录 (CWD)?这些将是您可以从流程外部使用的命令。