Saya tidak tahu apakah ini milik SO (karena itu adalah bug pengkodean) tetapi saya pikir kalian akan lebih berpengetahuan tentang seluk-beluk perangkat lunak yang digunakan (jadi mungkin bahkan U&L dapat dipertimbangkan).
Inilah skrip kode minimal (lihat suntingan untuk skrip lengkap, ada alasan saya melakukannya dengan cara ini);
#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log
Yang coba dilakukan adalah menjalankan server di latar belakang, yang menghasilkan file log.
Lalu saya follow
menggunakan file log itu less +F
. Saat Anda melakukannya, untuk keluar ini Anda harus menekan ctrl+ csebelum Anda bisa menekan Q.
Apa yang terjadi adalah, ketika saya ctrl+ cdi dalam less
perintah (untuk menghentikan tailing
) itu entah bagaimana membunuh server dimulai dengan nohup
di atas! Tidak ada yang terpengaruh. Saya dapat shift+ funtuk memulai tailing log lagi (yang tidak mendapat info baru karena server terbunuh) dan jika saya menekan Qsisa skrip dijalankan secara normal.
Tahukah Anda mengapa ini terjadi? Bagaimana cara menghindarinya / hal lain yang harus saya gunakan?
PS
Program server mungkin mendengarkan ^C
, yang mungkin menjadi masalah; adakah yang bisa saya lakukan untuk menghentikannya? Seperti, ketika saya hanya menjalankannya {SERVERCOMMAND}
sendiri (dengan cara memblokir), saya dapat menekan ctrl+ c, yang tidak langsung membunuhnya; itu mencetak Received ^C signal, shutting down
(dan kemudian membunuh dirinya sendiri). Inilah yang terjadi ketika saya ^C
masuk less
(Final Received ^C signal, shutting down
ditulis ke log).
PPS
Saya sudah mencoba beberapa hal (tidak ada yang berhasil);
mencoba memutus stdin dari skrip dengan mengubah
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 & to nohup echo '' | {SERVERCOMMAND} > currentOutput.log 2>&1 & or nohup cat /dev/null/ | {SERVERCOMMAND} > currentOutput.log 2>&1 &
gunakan
stty intr ^G
untuk mengganti perintah interrupt, tetapi kemudian ctrl+ tetap gmelakukan apa yang^C
sedang dilakukan (jadi ini mungkin merupakan masalah dengan emulator terminal saya;konsole
)menempatkan
nohup
& / atauless
garis dalam tanda kurung (untuk membuatnya menjadi subkulit)menjalankan skrip
xterm
alih-alihkonsole
nohup
mencegah proses menerima SIGHUP
sinyal sedangkan CTRL + C mengirim SIGINT
sinyal. Itu sebabnya nohup
tidak memiliki efek yang Anda harapkan.
I think it is due to the handling within the database software, not on the shell
. Bagaimana program melakukan ini? Lalu bagaimana saya bisa menghentikannya?