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 followmenggunakan 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 lessperintah (untuk menghentikan tailing) itu entah bagaimana membunuh server dimulai dengan nohupdi 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 ^Cmasuk less(Final Received ^C signal, shutting downditulis 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 ^Guntuk mengganti perintah interrupt, tetapi kemudian ctrl+ tetap gmelakukan apa yang^Csedang dilakukan (jadi ini mungkin merupakan masalah dengan emulator terminal saya;konsole)menempatkan
nohup& / ataulessgaris dalam tanda kurung (untuk membuatnya menjadi subkulit)menjalankan skrip
xtermalih-alihkonsole
nohupmencegah proses menerima SIGHUPsinyal sedangkan CTRL + C mengirim SIGINTsinyal. Itu sebabnya nohuptidak 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?