Tôi muốn chạy và cấu hình một quy trình tương tự như một daemon từ một tập lệnh.
Shell của tôi là zsh được mô phỏng theo Cygwin và daemon là SFK , một máy chủ FTP cơ bản.
Đối với những gì quan trọng ở đây, kịch bản startserv.sh
có thể được soạn thảo như sau:
#!/bin/sh
read -s -p "Enter Password: " pw
user=testuser
share=/fshare
cmd="sfk ftpserv -user=$user -pw=$pw -usedir $share=$share"
$cmd &
Sau khi chạy tập lệnh startserv.sh
, nó dừng (kết thúc?) Mà không hiển thị bất kỳ dấu nhắc nào, sau đó:
CTRL+ Ckết thúc cả kịch bản và quá trình công việc nền;
Đánh Entervào kịch bản kết thúc quá trình vẫn còn trong nền.
Dù sao tôi chỉ có thể nhìn thấy nó qua ps
và không jobs
, vì vậy, khi tôi muốn đóng quá trình, tôi phải gửi một kill -9
tín hiệu tàn bạo , đó là điều tôi muốn tránh để ủng hộ CTRL+ C.
Một thay thế sẽ được chạy toàn bộ kịch bản trong nền. 'Sẽ là', nhưng read
lệnh không thể nhận được đầu vào của người dùng nếu tập lệnh được chạy dưới dạng startserv.sh &
.
Lưu ý rằng tôi cần một máy chủ phù du, không phải là một trình nền thực sự : nghĩa là tôi muốn quá trình máy chủ chạy ở chế độ nền, sau khi tập lệnh kết thúc, để thực hiện các tác vụ shell tương tác đơn giản (với một máy khách ảo), nhưng tôi không ' t cần quá trình để tồn tại vỏ; do đó nohup
có vẻ không phù hợp.
bgproc="$!"
và sau đócommand "$bgproc"
thực hiện hành động thích hợp. Xem thêm stackoverflow.com/questions/1908610/ Mạnh