【问题标题】:Confusion with pid's and processes on linuxlinux上的pid和进程混淆
【发布时间】:2012-09-29 17:02:14
【问题描述】:

从阅读文档和在线大多数人一直在说,要杀死 linux 中的进程,只需要命令 kill "pid"。

For example to kill memcached would be kill $(cat memcached.pid)

但是对于我试图杀死的几乎所有进程,包括上面的进程,这都行不通。我设法让它使用不同的命令:

ps aux | grep (process name here)

该命令,无论出于何种原因,都会得到一个不同的 pid,这将在终止程序时起作用。

我想我的问题是,为什么会有不同的 pid? id 的意义不是唯一吗?为什么 celery、memcached 和其他进程在使用 aux | 时都有不同的 pid? grep 命令,与 .pid 文件中的 pid 相比?这是我的配置中的某种错误还是这样?

另外,在哪里可以获得 linux 中可执行文件的所有参数和描述?

我知道“man”命令对某些功能很有用,但它不适用于许多可执行文件,例如 celery。

谢谢!

【问题讨论】:

    标签: linux unix pid


    【解决方案1】:

    进程 ID (pid) 由操作系统在进程启动时即时分配。它是独一无二的,因为没有两个进程具有相同的 ID。但是,不能保证实际值从一次进程运行到另一次运行是相同的。考虑它的最佳方式就像那些“正在服务”的门票:

    您是正确的,您可以通过psgrep 查找ID,尽管您可能会发现使用起来更容易:

    pgrep (process name here)
    

    另外,如果你只是想杀死进程,你甚至可以跳过上面的步骤并使用:

    pkill (process name here)
    

    【讨论】:

    • 恕我直言,pkill 不应该永远推荐给任何理解基础知识有实际问题的人。他们一定会在远程机器上尝试诸如sudo pkill ssh 之类的愚蠢事情......
    • 现在我想起来了,即使pgrep 也是有问题的......尤其是当你需要-x 标志让它开始有意义时......
    • @thkala 嗯,可能。虽然我无法想象将sudoer 权限授予不了解流程的人。
    • Err... 大多数家庭用户怎么样?还是小型(例如学术)装置中的人?在这些情况下,管理员只是可用的任何人,并且不能保证最低限度的知识水平......
    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2015-12-15
    • 2020-09-18
    • 2021-06-29
    • 1970-01-01
    • 2012-04-29
    相关资源
    最近更新 更多