วิธีรับชื่อกระบวนการที่คาดหวังจากพา ธ ที่ปฏิบัติการได้ในไฟล์. desktop

Jun 10 2020

ฉันกำลังอ่านไฟล์. desktop ที่พบใน / usr / share / applications และดูเหมือนว่า SOME จะไม่ใช้ชื่อกระบวนการเดียวกันกับไฟล์ปฏิบัติการ (ส่วนใหญ่ทำ)

มีวิธีค้นหาว่าชื่อกระบวนการจะเป็นอย่างไร?

ตัวอย่าง:

ไฟล์ Chromes .desktop

[Desktop Entry]
Version=1.0
Name=Google Chrome
Exec=/usr/bin/google-chrome-stable %U
StartupNotify=true
Terminal=false
Icon=google-chrome
Type=Application
Categories=Network;WebBrowser;
MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/ftp;x-scheme-handler/http;x-scheme-handler/https;
Actions=new-window;new-private-window;

เมื่อฉันเรียกใช้pidof google-chrome-stableมันจะส่งกลับค่าว่าง

แต่เมื่อฉันเรียกใช้pidof chromeมันจะส่งกลับไฟล์

879321 879303 805004 755066 693852 693837 693796 688198 624316 624289 3194 2788 2762 2734 2685 2677 2641 2637 2620 2613 2611 2601

มีวิธีที่ดีกว่าในการค้นหา PID หรือไม่?

โปรดทราบว่าฉันต้องค้นหาจากข้อมูลที่พบในไฟล์. desktop (เรื่องยาว)

ขอบคุณ

คำตอบ

1 Ravexina Jun 10 2020 at 04:27

ขึ้นอยู่กับExecบรรทัดอาจเป็นเชลล์สคริปต์ที่เรียกใช้ไฟล์ปฏิบัติการอื่นหรืออาจเป็นลิงก์หรือแม้แต่ไฟล์ปฏิบัติการที่วางไข่อื่น

ฉันไม่แน่ใจว่าคุณจะรับข้อมูลจากdesktopไฟล์ได้อย่างไร แต่อาจมีวิธีแก้ปัญหาเดียวในการเรียกใช้ ...

โปรดทราบว่าฉันไม่มี Google-chrome ดังนั้นฉันจึงใช้โครเมียมในตัวอย่างของฉัน

# Extract the command from desktop file
$ CMD=$(grep -Po "(?<=^Exec=).+\s" /usr/share/applications/chromium.desktop)
$ echo $CMD
/usr/bin/chromium

# Run it
$ CMD & # Get the PID $ PID=$(echo $!)
$ echo $PID
5146

# Get process name from PID
$ ps --no-header -p $PID -o comm
chromium

# Get the complete command line + arguments
ps --no-header -p $PID -o cmd /usr/lib/chromium/chromium --show-component-extension-options --enable-gpu-rasterization # Terminate process kill -SIGTERM $PID
1 xenoid Jun 10 2020 at 04:48

สิ่งที่เป็นไปได้ที่จะเกิดขึ้นที่นี่คือไฟล์ปฏิบัติการเริ่มต้นใช้การexec...()เรียกใช้ระบบ (*) เพื่อแทนที่โค้ดทั้งหมดด้วยไฟล์ปฏิบัติการและพารามิเตอร์ใหม่และรหัสกระบวนการเดียวกันจะสอดคล้องกับรหัสใหม่นั้นและอยู่ในรายการโดยpsเพื่อให้การเริ่มต้น ปฏิบัติการจะหายไปจากรายการกระบวนการ สิ่งนี้มักใช้เพื่อตั้งค่าสภาพแวดล้อมสำหรับปฏิบัติการอื่น

(*) หรือexecbuiltin ถ้าเป็นเชลล์สคริปต์