ฉันจะกำหนดชื่อกระบวนการของแอปพลิเคชันได้อย่างไร


13

นี่คือสถานการณ์:

การทำงาน (ตัวแก้ไขเวอร์ชันถัดไป) ของ Unity Quick List ฉันต้องการเพิ่มวิธีที่เชื่อถือได้ของไอคอนตัวเรียกใช้ "การเริ่มต้นใหม่" หากต้องการทำเช่นนั้นฉันต้องลบไอคอน (แก้ไข gsettings) และแทนที่มันในตำแหน่งเดียวกัน จนถึงไม่มีปัญหา อย่างไรก็ตามหากแอปพลิเคชันที่สงสัยกำลังทำงานอยู่ผู้ใช้อาจสูญเสียข้อมูลเนื่องจากแอปพลิเคชันจะปิดเมื่อไอคอนนั้นถูกลบออกจากตัวเรียกใช้งาน สิ่งที่ฉันต้องการเป็นวิธีที่น่าเชื่อถือในการหาชื่อกระบวนการของโปรแกรมประยุกต์เพื่อให้การตรวจสอบแก้ไขในรายการของกระบวนการทำงานถ้าโปรแกรมทำงานและส่งข้อความแจ้งเตือนให้กับผู้ใช้ว่าไอคอนไม่สามารถเริ่มต้นใหม่ถ้าสมัครเป็น วิ่ง.

สิ่งที่ฉันทำจนถึงตอนนี้คือทำให้ตัวแก้ไขมองเข้าไปในไฟล์เดสก์ท็อปเพื่ออ่านคำสั่งอ่านคำสั่งถอดจากส่วนไดเรกทอรีและดูสคริปต์ระยะไกลที่อาจเป็นไปได้ซึ่งคำสั่งไฟล์เดสก์ท็อปอาจอ้างถึง ด้วย "./"

แม้ว่าวิธีการนี้จะทำงานได้ดีกับแอปพลิเคชันทั้งหมดที่ฉันทดสอบ แต่ฉันมีความรู้สึกว่าจะต้องมีวิธีที่ง่ายกว่าในการแก้ปัญหาด้วยวิธี "all in one" ...

มีอะไรบ้าง

นอกจากนี้ยังมีข้อเสนอแนะเพื่อรับสถานการณ์พิเศษเพิ่มเติมอีก


ทำไมแอปพลิเคชันถึงปิดเมื่อไอคอนถูกลบออกจากตัวเรียกใช้งาน การออกแอปพลิเคชันที่ไม่ได้ปักหมุดไว้กับตัวเรียกใช้จะทำให้ไอคอนถูกลบออก แต่ทำไมการลบไอคอนออกจากแอปพลิเคชัน
Eliah Kagan

@Eliah: เลิกอาจจะไม่แสดงออกทางขวาแอพลิเคชันก็เกิดปัญหา ....
จาค็อบ Vlijm

@JacobVlijm ดังนั้นนี่คือเอกภาพที่เฉพาะเจาะจงใช่มั้ย ความสามัคคีมีกลไกสำหรับสิ่งนั้นอยู่แล้ว ข้อกำหนดคืออะไร? จะทราบชื่อกระบวนการเดียวกับในpsและxpropเอาท์พุท?
Sergiy Kolodyazhnyy

@Serg ชื่อกระบวนการ "คำนวณ" จาก.desktopไฟล์ซึ่งไม่จำเป็นต้องเป็น WM_CLASS WM_CLASS สามารถตั้งค่าได้จากภายในแอปพลิเคชัน
Jacob Vlijm

@JacobVlijm อ่าถ้าคุณเริ่ม firefox.desktopมันจะเปิดตัว firefox ด้วย PID 1234 แต่เปลี่ยนWM_CLASSไปเป็น 'Totally Not Firefox' .desktopไฟล์ แต่ไม่ได้เปลี่ยน คุณต้องการที่จะได้รับชื่อที่แนบมากับ PID 1234 WM_CLASSโดยไม่คำนึงถึง ฉันคิดว่าฉันเห็นสิ่งที่ต้องทำ แต่คุณไม่ได้ตอบคำถามแรกของฉัน - มันใช้ได้ไหมถ้าเป็นเอกภาพเท่านั้น?
Sergiy Kolodyazhnyy

คำตอบ:


3

ไม่มีวิธีแก้ไขปัญหานี้ในกรณีทั่วไป กลไกใดก็ตามที่คุณคิดขึ้นมาฉันเชื่อว่ามันจะเป็นไปได้เสมอที่จะเขียนกระบวนการที่จะหลบหลีกคุณเว้นแต่คุณจะปรับเปลี่ยนวิธีการเปิดตัวกระบวนการในตอนแรกเพื่อติดตามพวกเขาในแบบนั้น

การพุ่งพรวดต้องจัดการกับปัญหาเดียวกันเพื่อติดตามว่า daemons ยังคงทำงานอยู่และผู้เขียนงานพุ่งพรวดต้องระบุรายละเอียด (จำนวนส้อม) สำหรับการพุ่งพรวดที่จะติดตาม เนื่องจากว่าคนธรรมดาไม่สามารถจัดการได้โดยปราศจากความช่วยเหลือฉันไม่คิดว่าคุณจะทำได้ และพุ่งพรวดแม้ควบคุมวิธีการเปิดตัวกระบวนการซึ่งฉันไม่คิดว่าคุณอยู่ที่นี่

ฉันคิดว่าสิ่งที่ดีที่สุดที่คุณสามารถทำได้คือสิ่งที่คุณทำอยู่แล้ว การดู/proc/<pid>/statและ/proc/<pid>/cmdlineเป็นวิธีทั่วไปที่สมเหตุสมผล แต่ก็ยังไม่สามารถตรวจจับได้ทุกกรณี pgrepคำสั่ง wraps นี้ หากคุณยังไม่ได้ใช้pgrepงานให้ดูที่pgrep manpageเพื่อดูตัวเลือกของสิ่งต่าง ๆ ที่คุณสามารถเทียบได้

ต้องบอกว่าฉันไม่แน่ใจว่าคุณต้องทำสิ่งนี้ตั้งแต่แรก หากคุณไม่สามารถติดตามกระบวนการฉันก็ไม่เห็นว่า Unity สามารถทำเช่นนี้ได้อย่างไร วิธีที่ดีกว่าคือการกำจัดแอปพลิเคชันล่มในตอนแรกใช่ไหม ฉันจะดูรายละเอียดว่าเหตุใดแอปพลิเคชันของคุณจึงหยุดทำงาน ฉันสงสัยว่านี้จะมีผลต่อการใช้งานที่ตระหนักถึงความสามัคคีที่จะโทรกลับไปที่ความสามัคคีสำหรับฟังก์ชันการทำงานพิเศษผ่าน DBus ?


ขอบคุณสำหรับคำตอบอย่างละเอียด! ฉันจะตรวจสอบรายละเอียด (โดยเฉพาะย่อหน้าสุดท้ายของคุณ) และอาจเสนอไอคอน "เริ่มต้นใหม่" เป็นตัวเลือก "ทดลอง" หากฉันไม่สามารถค้นหาวิญญาณได้ 100% ข่าวดีคือในระหว่างนี้ฉันไม่พบข้อยกเว้นสำหรับวิธีการที่ฉันใช้ ขอบคุณอีกครั้ง!
Jacob Vlijm

1

xpropคำสั่ง (ตามด้วย Alt-แท็บไปที่หน้าต่างแอปที่เกี่ยวข้องจากนั้นคลิกครั้งเดียวในหน้าต่าง) ดูเหมือนว่าจะทำเคล็ดลับสำหรับฉัน


WM_CLASSมักจะตรงกับชื่อกระบวนการ แต่ไม่เสมอไป การกำหนด (รหัส) หน้าต่างฉันสามารถให้อะไรก็ได้ที่WM_CLASSฉันต้องการ แม้แต่ทำมันเองเพื่อสร้าง windows ที่ทำงานจากกระบวนการที่แตกต่างกันจัดกลุ่มในไอคอนตัวเรียกใช้งานเดียว
Jacob Vlijm

โอ้ นั่นเป็นความอัปยศ มันก็คุ้มที่ฉันจะเพิ่มการปฏิเสธความรับผิดชอบ "... ดูเหมือนว่าจะทำเคล็ดลับสำหรับฉัน" ในตอนท้าย มันเป็นฟังก์ชั่นที่ฉันคาดหวังว่าจะถูกสร้างขึ้นในระบบปฏิบัติการและฉันคิดว่าฉันไม่รู้วิธีการใช้งาน อย่างน้อยที่สุดฉันก็คาดหวังว่าข้อมูลใน "เกี่ยวกับ"
el_gallo_azul
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.