Có thể thay đổi quy trình cha mẹ của một quy trình? Nếu có, làm thế nào?
Ví dụ,
Làm thế nào để
screen
quản lý để đính kèm mộtscreen
phiên và các quy trình chạy bên trong nó với các quy trình shell khác nhau? Có sự thay đổi của quá trình cha mẹ?Tôi dường như đã nghe nói về những cách khác để thay đổi quy trình shell trong đó một chương trình đang chạy, nhưng tôi không nhớ. Có phải cũng có sự thay đổi của quá trình phụ huynh của chương trình?
Tôi nghĩ
disown
về một quy trình thay đổi quy trình cha mẹ của quy trình, đơn giản vì tên nàydisown
ngụ ý điều đó. Nhưng tôi thấy nó không đúngMáy khách Emacs có thể đính kèm với máy chủ emacs trên một tab thiết bị đầu cuối khác. Có sự thay đổi của quá trình cha mẹ?
getppid(2)
, một cuộc gọi hệ thống và các cuộc gọi hệ thống được xử lý bởi kernel. Một chương trình có thể bị nhầm lẫn bằng cách phát hành cuộc gọi đó, lưu giá trị và sau đó sử dụng giá trị đó sau khi nguồn gốc của nó đã thay đổi. Có một cơ hội của một điều kiện cuộc đua ở đây.
disown
chỉ cần loại bỏ một đứa trẻ nhất định khỏi danh sách các tiến trình con của shell. PPID của trẻ vẫn là vỏ. Shell đã quên rằng nó đã từng bắt đầu đứa trẻ đó, nhưng kernel nhớ lại.