Có thể tìm thấy đường dẫn của một chương trình đang chạy?


17

Tôi có một xmms2dquá trình đang chạy, nhưng hai tệp thực thi có thể (trong các thư mục khác nhau, cả trong đường dẫn thực thi) có thể sinh ra nó. Tôi nghi ngờ rằng một trong số đó bị hỏng, bởi vì đôi khi chương trình này hoạt động và đôi khi không. Quá trình đang chạy bây giờ hoạt động, vì vậy tôi muốn xóa (hoặc đổi tên) cái khác.

ps ax|grep "xmms"trả về 8505 ? SLl 2:38 xmms2d -vmà không có thông tin đường dẫn. Đưa ra PID, tôi có thể tìm thấy liệu nó được chạy từ /usr/bin/xmms2dhay /usr/local/bin/xmms2dkhông?

Cảm ơn!


2
ps -C xmmssẽ làm cho grep của bạn trở nên lỗi thời.
người dùng không xác định ngày

1
pgrep cũng sẽ làm điều đó.
jlliagre

Câu trả lời:


22

Thử đi:

ls -l /proc/8505/exe

Hoặc nếu bạn không muốn phân tích đầu ra của ls, chỉ cần làm:

readlink /proc/8505/exe

hoặc là

realpath /proc/8505/exe

6

Nếu bạn đang chạy Solaris, cách này hơi khác so với Linux được đề xuất:

$ for i in $(pgrep bash)
do
  printf "%6d %s\n" $i $(readlink /proc/$i/path/a.out)
done
   577 /usr/bin/bash
 11247 /usr/bin/bash
 13921 /usr/bin/bash
 13992 /tmp/bash

Nếu bạn muốn biết thư mục làm việc hiện tại của các tiến trình đang chạy, bạn có thể sử dụng:

pwdx $(pgrep xmms)

ví dụ:

$ pwdx $(pgrep ksh)
2904: /home/jlliagre
2906: /home/jlliagre
3844: /tmp

(đã xóa nhận xét của tôi vì nó không còn được áp dụng sau khi chỉnh sửa của bạn :)
Kjetil Jorgensen

-1

Tôi bắt đầu mousepad từ vỏ:

mousepad & 
[1] 24289

kiểm tra xem nó đến từ đâu:

which mousepad 
   /usr/bin/mousepad

bắt đầu nó với đường dẫn:

/usr/bin/mousepad &

xem qua ps:

ps v -C mousepad 
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
24289 pts/3    S      0:00      3    62 85441 10964  1.0 mousepad
24292 pts/3    S      0:00      0    62 85433 10864  1.0 /usr/bin/mousepad

Như chúng ta thấy, một cái được gọi không có đường dẫn được hiển thị mà không có đường dẫn, và bắt đầu với PATH, và do đó được tìm thấy bởi

which mousepad

Đơn giản như vậy phải không? Chờ đợi! Nếu tôi bắt đầu mousepad từ menu thì sao? Chà, nó có thể được chỉ định có hoặc không sử dụng cài đặt PATH. Tôi đã thử. Một khởi đầu bình thường dẫn đến một 'mousepad' đơn giản ps v -C. Vì ~ / bin là phần đầu tiên trong PATH của tôi, tôi tạo ra một hình nộm ở đó, và, voila, hình nộm được bắt đầu từ menu.

Nhưng nếu bạn bắt đầu một chương trình tự xóa thì sao? Mà sẽ không tìm thấy chương trình đã xóa và báo cáo sai, nếu có một thứ hai trong đường dẫn.

Vì vậy, đó là một điều kiện cuộc đua. Nếu bạn biết rằng các chương trình của bạn không tự xóa hoặc không di chuyển trong khi bạn đang điều tra vị trí của chúng ps v -C NAMEwhich NAMEsẽ hoạt động khá tốt.


Điều này sẽ luôn luôn làm việc? Giả sử tôi có một tệp thực thi trong hai thư mục khác nhau và tôi chạy ./someexecutabletrong cả hai?
apoorv020 ngày

Tất nhiên là không, bởi vì cả hai sẽ hiển thị dưới dạng ./someexecutable hoặc / bin / bash ./someexecutable
người dùng không biết

-4

Đi trước và xóa cả hai tập tin (không có tùy chọn bắt buộc -f). Tệp bị xóa là tệp không chạy !!

Khóa tệp thực thi hệ thống sẽ không cho phép bạn xóa bất kỳ tệp nào đang được thực thi.


Câu trả lời của bạn không cung cấp câu trả lời thực sự cho câu hỏi.
Risto Salminen

4
Nó cũng sai. Bạn có thể xóa các thực thi đang chạy mà không có vấn đề. Bạn nghĩ các gói như init, luôn chạy, được nâng cấp như thế nào? Bạn không thể sửa đổi một thực thi đang chạy.
Patrick

1
Điều này là đáng báo động - đừng làm điều này
Michael Mrozek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.