thể trùng lặp:
Linux: Prevent a background process from being stopped after closing SSH clientLàm thế nào để sử dụng fork() để daemonize một tiến trình con độc lập với cha mẹ của nó?
tôi có một chương trình C mà tôi truy cập và tương tác với hơn terminal (thường từ SSH trên một hộp linux). Tôi đã cố gắng tìm ra giải pháp cho vấn đề mà sau khi đóng terminal/logout, quá trình kết thúc bằng nó (chương trình yêu cầu một số tùy chọn về kinh doanh của nó mà không cần tương tác thêm vì vậy tôi muốn có nó tiếp tục chạy ngay cả sau khi tôi đăng xuất SSH). Có nhiều cách trong linux để tránh điều này như 'màn hình', nhưng tôi muốn làm điều đó theo lập trình với C mà không dựa vào các gói đã cài đặt như màn hình, ngay cả khi điều này có nghĩa là phát minh lại bánh xe. Cho đến nay tôi hiểu fork() là cách tầm thường tiêu chuẩn để thực hiện một quy trình, vì vậy bất kỳ ai cũng có thể giúp tôi hoàn thành mã cho phép quá trình được mô tả ở trên xảy ra? Không.
Trong mẹ:
main()
{
//Do interactive stuff
signal(SIGCHLD, SIG_IGN); //stops the parent waiting for the child process to end
if(fork())
exit(0);
// and now the program continues in the child process
tôi bây giờ có thể logout của SSH đó đóng vỏ gốc ... và đứa trẻ tiếp tục công việc của mình!
Trong con:
//Continue with processing data/whatever the program does (no input/output to terminal required)
exit(0);
Đọc tất cả các câu trả lời. http://stackoverflow.com/questions/285015/linux-prevent-a-background-process-from-being-stopped-after-closing-ssh-client –
Um, chỉ cần sử dụng 'nohup' khi bạn chạy nó? Không yêu cầu. –
@ Brian, nohup sẽ không cho phép tôi tương tác với chương trình. Một tương tác dòng lệnh của nó. – user1166981