Câu hỏi PID của các lệnh chạy với tư cách người dùng khác nhau


Trong khi là một root, tôi muốn bắt đầu một dịch vụ như một người dùng cụ thể và ghi tập tin PID của nó. Ví dụ không hoạt động tối thiểu:

if [ $UID -eq 0 ]; then  
su myuser <<EOF 
sleep 30 &  
echo $! >mypid.pid  
EOF
fi  

Sau khi tập tin thực thi mypid.pid trống, $! cũng trống rỗng, nhưng có một quá trình ngủ cho người dùng của tôi với pid được chỉ định (rõ ràng). Tôi nhấn nó là bởi vì một vỏ mới được sinh ra và bằng cách nào đó nó không theo dõi lịch sử của nó. Có cách nào tôi có thể làm cho nó hoạt động không?


0
2018-01-13 10:58


gốc




Các câu trả lời:


Bởi vì bạn nuôi vỏ được gọi bởi su(1) từ một tập lệnh, $! được giải thích bằng cách gọi script su(1). Cách để ngăn chặn điều này là để trốn thoát $!, sau đó $! không được đưa vào vỏ được gọi bởi su(1) và không phải là tập lệnh gọi:

if [ $UID -eq 0 ]; then  
su myuser <<EOF 
sleep 30 &  
echo \$! >mypid.pid  
EOF
fi  

0
2018-01-13 18:35