AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 412042
Accepted
K Deis
K Deis
Asked: 2017-12-21 05:43:05 +0800 CST2017-12-21 05:43:05 +0800 CST 2017-12-21 05:43:05 +0800 CST

如何获取pid号和它工作的文件夹

  • 772

我怎样才能得到它工作的PID号和文件夹?

如果我在不同的文件夹中运行 2 个相同的程序:

/var/www/public_html/first_folder/test.jar <i>(it runs all the time)</i>
/var/www/public_html/second_folder/test.jar <i>(it runs all the time)</i>

如果我运行这个命令ps aux | grep test.jar

结果:

www-data  3766  0.5  3.8 2959916 75616 ?       Sl   15:01   0:13 java -jar test.jar

www-data  4239  3.4  4.1 2959916 82432 ?       Sl   15:31   0:18 java -jar test.jar

我不知道它是哪个 PID — 第一个文件夹或第二个。

process java
  • 3 3 个回答
  • 5053 Views

3 个回答

  • Voted
  1. ilkkachu
    2017-12-21T06:03:31+08:002017-12-21T06:03:31+08:00

    在 Linux 上,您可以在/proc/$pid/cwd. 这是一个指向工作目录的神奇符号链接。/proc/$pid/cmdline给出进程的命令行,但它用 NUL 字节分隔,因此需要一些处理。您可以执行类似这样的操作来获取与某些pgrep条件匹配的多个程序的工作目录和命令行:

    for pid in $(pgrep -f test.jar); do
        echo "pid: $pid cwd: $(readlink "/proc/$pid/cwd") cmd: $(tr '\0' ' ' < "/proc/$pid/cmdline")"
    done
    

    当然,如果您已经使用 eg 查找了 PID ps,ls -l /proc/<PID>/cwd则readlink /proc/<PID>/cwd 可以这样做。

    您也可以使用lsof,但我不知道如何让它显示程序的命令行参数。

    $ lsof -a -d cwd -c cat
    COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
    cat     30693 someuser  cwd    DIR  253,1     4096 1700752 /tmp/y
    cat     30694 someuser  cwd    DIR  253,1     4096 1700611 /tmp
    

    在 FreeBSD 上,这同样可以通过fstat命令获得,尽管获取实际路径有点棘手和缓慢:

    对于 $(pgrep java) 中的 pid;做
        fstat -p "${pid}" | awk '{ if ($4 == "wd") print '"${pid}"',$5,$6; }'
    完成 | 同时读取 -r pid root inum ;做
        printf "%s: " "${pid}"
        查找 -x "${root}" -type d -inum "${inum}" 2>/dev/null
    完毕

    • 6
  2. Best Answer
    MiniMax
    2017-12-21T15:31:28+08:002017-12-21T15:31:28+08:00
    pgrep -x program_name_pattern | xargs pwdx
    

    解释

    1. pgrep pattern- 查看当前正在运行的进程并列出与模式匹配的进程 ID。
      • -x, --exact - 仅匹配名称与模式完全匹配的进程。
    2. pwdx- 报告进程的当前工作目录。

    测试

    pgrep -x my_program | xargs pwdx
    
    ###Output###
    15880: /home/minimax/Desktop/sandbox
    15907: /home/minimax/Desktop/sandbox/yet_one_folder
    
    • 1
  3. baselab
    2017-12-21T06:00:28+08:002017-12-21T06:00:28+08:00

    lsof你的朋友在这里吗:

    lsof -c java | grep /var/www/public_html
    

    第二列显示 PID。

    • 0

相关问题

  • vmstat 如何考虑 Java 堆?

  • `/proc/irq/.../spurious` 包含什么?

  • 父进程可以改变其子进程的环境吗?

  • “弹出”如何让进程关闭文件句柄?

  • linux java -version 仅适用于 root 用户[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve