Bash / ZSH: การเลิกทำ 'ปฏิเสธ'


30

มีวิธีการ 'ติดตั้งใหม่' กระบวนการไปยังตารางงานเชลล์หลังจากที่มันถูก 'ปฏิเสธ' หรือไม่?

แก้ไข: $ SEARCHENGINE ทำให้ฉันทั้งหมดล้มเหลว ดูไม่ดีเกินไป

คำตอบ:


16

เมื่อพิจารณาว่างานลินุกซ์และความเป็นเจ้าของกระบวนการทำงานได้อย่างไรฉันกลัวว่าเป็นไปไม่ได้ที่จะเป็นเจ้าของกระบวนการอีกครั้งโดยไม่ได้รับความช่วยเหลือจากกระบวนการปรับใช้

ผู้ปกครองอาจ 'ปฏิเสธ' เด็กซึ่งก็คือ 'บุญธรรม' โดยกระบวนการที่ชื่อว่า 'init' ความปลอดภัยของระบบป้องกันไม่ให้ใครบางคนคว้ากระบวนการของคนอื่น เมื่อคุณปฏิเสธมันกระบวนการจะกลายเป็นของคนอื่น (init's) เพื่อควบคุม คุณในฐานะ 'ผู้ใช้' ยังคงสามารถฆ่ากระบวนการ แต่คุณไม่สามารถรับกลับคืนมาได้ ความพยายามในการบีบบังคับ init เพื่อส่งคืนโพรเซสของคุณไม่น่าเป็นไปได้เนื่องจาก init ไม่ได้แม้แต่อ่านเมล

ในขณะที่มันฟังดูเหมือนจะเป็นคำตอบของ "อย่าทำอย่างนั้นจริงๆ"


1
สิ่งนี้ไม่ถูกต้อง: กระบวนการหลักไม่สามารถทำให้เด็กได้รับการอุปการะยกเว้นการออก พฤติกรรมที่คุณอธิบายจะต้องมีการทริกเกอร์จากกระบวนการลูก (หรือโดยเคอร์เนลซึ่งจะทำบางสิ่งนี้โดยอัตโนมัติหากผู้ปกครองเสียชีวิต) กระบวนการไม่สามารถนำเด็กมาสมัครใจได้ แต่จะไม่ยอมแพ้
Gilles 'หยุดชั่วร้าย'

1
ขอโทษด้วย. ความผิดของฉัน. oversimplified มากเกินไป วิ่งผ่านแหล่งทุบตีอีกครั้งทุบตียังคงความเป็นเจ้าของ แต่ยับยั้งการถอนหายใจถูกส่งผ่านไปยังกระบวนการเด็ก ดังนั้นมันอาจเป็นไปได้ที่จะนำมันกลับคืนมา แต่มันยังไม่ได้สร้างขึ้นเพื่อทุบตี (ยัง) ด้วยเหตุผลบางอย่างฉันติดค้างอยู่กับการได้รับการเลี้ยงเด็กกำพร้าและซอมบี้
lornix

@ lomix ใช่ แต่เมื่อคุณออกจากเชลล์คุณไม่ได้คัดลอกมาจากนั้นมันจะได้ค่า ppid เป็น 1 ดังนั้นการให้เหตุผลของคุณจึงถูกต้อง ใครไม่ชอบเว้นแต่พวกเขากำลังจะออกไป: p
Orwellophile

1
ขออภัยคำตอบนี้ผิด เพียงใช้reptyr(ดูคำตอบของฉันสำหรับตัวอย่างการใช้งาน)
Christian Pietsch

18

ในขณะที่ฉันคิดว่าสิ่งนี้จะไม่ช่วยใครก็ตามในสถานการณ์ที่โชคร้ายที่ปฏิเสธกระบวนการที่ไม่ถูกต้องหากคุณถูกไล่ออกจากงานและแทนที่ด้วย:

https://github.com/nelhage/reptyr

คุณจะสามารถซ่อมแซมกระบวนการใด ๆ (เช่นย้ายภายในหน้าจอ)


2
ฉันได้กระบวนการคืนค่าของฉันที่ถูกปฏิเสธด้วย reptyr ดังนั้นมันจึงทำงานเช่นเดียวกับยูทิลิตี้ที่ไม่ได้ถูกเปิดเผยที่ฉันกำลังมองหา
hlovdal

คุณพูดถูก @hlovdal: คำตอบนี้ผิดไปครึ่งนึง reptyrเป็นวิธีการแก้ disownแต่มีความจำเป็นต้องหยุดการใช้ เพื่อความชัดเจนฉันได้เขียนคำตอบใหม่
Christian Pietsch

11

reptyrทั้งหมดที่คุณต้องการก็คือ มันอาศัยอยู่บนGitHubและได้รับการบรรจุสำหรับ Debian ตั้งแต่ Wheezy และอาจเป็นไปได้สำหรับ GNU / Linux distros อื่น ๆ เช่นกัน มันจะทำงานเบื้องหน้ากระบวนการที่ถูกปฏิเสธของคุณในเทอร์มินัลปัจจุบันหากคุณเรียกใช้ด้วย ID กระบวนการ (PID) ตัวอย่างเช่น:

pgrep -f DISOWNED_PROCESS  # to find out the PID of the disowned process
reptyr PID                 # insert this PID here

2
(sudo apt-get install reptyr) จากนั้นให้ลองครั้งแรก: "เคอร์เนลปฏิเสธการอนุญาตขณะติดหาก uid ของคุณตรงกับเป้าหมายให้ตรวจสอบค่าของ / proc / sys / kernel / yama / ptrace_scope สำหรับข้อมูลเพิ่มเติมดู /etc/sysctl.d/10-ptrace.conf "ฉันเปลี่ยนค่าในทั้งสองตำแหน่งจาก 1 เป็น 0 และใช้งานได้ ฉันทดสอบการปฏิเสธและการประมวลผลของกระบวนการเป็นผู้ใช้เดียวกัน (โน๊ตบุ๊ค ipython บน ubuntu 14.04 LTS) บางทีนี่อาจโอเคสำหรับการพัฒนาในสภาพแวดล้อมที่แยก ... ไม่แน่ใจว่าความปลอดภัยสูงสุดของการเปลี่ยนแปลงอย่างไรก็ตาม บางทีคนที่มีความเชี่ยวชาญก็สามารถเข้ามาได้
FizxMike

1

ขอโทษค่ะ โดยหลักการแล้วมันอาจเป็นไปได้เนื่องจากการปฏิเสธเพียงแค่เปลี่ยนสถานะภายในเชลล์บางอย่าง - โดยทั่วไปจะลบ ID กระบวนการออกจากรายการและสามารถนำกลับมาได้โดยไม่ต้องยุ่งยากมากเกินไป (คุณต้องระมัดระวังในการทดสอบเล็กน้อยว่า pid ที่ reattached อยู่ในเซสชั่นที่ถูกต้อง แต่นั่นไม่สามารถผ่านไม่ได้) แต่ไม่มีกระสุนธรรมดา (bash, ksh, tcsh, zsh) ที่ดูเหมือนจะมีวิธีการเพิ่มอีกครั้ง (แม้ว่าจะมี zsh คุณสามารถเขียนไปยังjobstates, jobdirsและjobtextอาร์เรย์ที่เชื่อมโยงกันได้ แต่ฉันไม่รู้ว่าคุณจะบรรลุเป้าหมายนั้นได้มากแค่ไหน)

หากคุณต้องการให้เชลล์ส่งสัญญาณไปยังกระบวนการที่ถูกปฏิเสธเช่นเดียวกับที่ทำไว้สำหรับกระบวนการย่อยที่เป็นเจ้าของคุณสามารถเขียนงานสตับที่รอจนกว่าจะได้รับสัญญาณและส่งสัญญาณเดียวกันไปยังกระบวนการที่ถูกปฏิเสธ คุณสามารถส่งSIGSTOPและSIGCONTกระบวนการปฏิเสธที่จะจำลองCtrl+ และZ bgสิ่งเหล่านี้จะไม่สะดวกพอ ๆ กับการเป็นเจ้าของอีกครั้ง


0

สถานการณ์อะไรบ้าง ถ้าคุณต้องการเอาเครื่องกลับมาซักระยะหนึ่งคุณสามารถใช้หน้าจอ GNUแทนได้ มันไม่ได้ค่อนข้างถอดกระบวนการจากขั้ว - หน้าจอจำลองหนึ่งเพื่อประโยชน์ของกระบวนการ - แต่คุณสามารถแนบและแยกออกจากขั้วจริงที่คุณกำลังใช้ คุณสามารถแยกหน้าจอออกจากระบบจากนั้นกลับเข้าสู่ระบบอีกครั้งและแนบกับหน้าจอเดียวกัน


6
สถานการณ์ต่าง ๆ คือ: คุณปฏิเสธกระบวนการที่ไม่ถูกต้องและต้องการนำกลับคืนมา
nisc

1
อา ยาก หน้าจอจะต้องมีการแจ้งล่วงหน้า
สกอตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.