Pertanyaan Mulai proses latar belakang dari .bashrc


Saya menyadari bahwa ini mungkin masalah bodoh tapi saya tidak bisa menyelesaikannya selama berjam-jam bahkan jika situs stackoverflow digali dan google benar-benar.

Berikut adalah kode dasar dalam .bashrc untuk memulai gkrellm setelah saya masuk ke shell

if ps ax | grep -v grep | grep gkrellm > /dev/null
then
    echo "gkrellm is already running"
else
    command gkrellm &
fi

Saya sudah terbiasa mencoba

...
else
    nohup gkrellm &
fi
...

dan

...
else
    gkrellm
    $GK_PID=`pidof gkrellm`
    disown -h $GK_PID
fi
...

gkrellm ditempatkan dengan benar sebagai pekerjaan latar belakang dan saya dapat menggunakan shell (seperti yang diharapkan). TAPI saya masih memiliki gkrellm keluar setelah saya menekan Ctrl-c bahkan jika saya memulai aplikasi lain dari shell yang sama. Bagaimana cara mencegah gkrellm dari penutupan pada Ctrl-c press?

Untuk berjaga-jaga. Saya menggunakan klon PuTTY yang disebut KiTTY tetapi percaya itu bukan masalah.

Terimakasih atas bantuannya!


4
2018-06-16 18:21


asal


Jawaban:


menggunakan pesta (disown dan &>/dev/null)
Anda perlu menjalankan aplikasi di bg (gkrellm &) lalu disown saya t

if ps -C gkrellm -o user | grep "$LOGNAME" &>/dev/null 
then echo "gkrellm is already running"
else gkrellm & disown
fi

jika Anda ingin lebih portabel dan digunakan posix sh
Anda harus menggunakan nohup (bagian dari coreutils dan POSIX)
dan juga latar belakangnya (nohup cmd &)
Anda juga akan menggunakan .profile dari pada .bashrc

if ps -C gkrellm -o user | grep "$LOGNAME" 2>/dev/null 1>&2
then echo "gkrellm is already running"
else nohup gkrellm &
fi

pendekatan lain akan mencakup - seperti @Pontus menjawab - menggunakan alat seperti dtach, screen atau tmux, di mana perintah dijalankan dalam lingkungan yang terpisah.

oleh Pontus:
  akan lebih masuk akal untuk menggunakan fitur autostart window manager Anda

memang :) sebagai afaik gkrellm adalah aplikasi GUI, lebih baik untuk autostart, baik menggunakan .xinitrc (jika manajer login Anda mendukungnya), atau fasilitas autostart window manager Anda.


2
2018-06-16 23:29



Coba ganti "nohup gkrellm &" dengan ini:

screen -S gkrellm -d -U -m gkrellm

Ini akan memulai sesi layar terpisah yang menjalankan gkrellm, dan tidak akan peduli dengan sesi shell saat ini. Saya tidak yakin jika memulainya dari .bashrc adalah solusi terbaik, akan lebih masuk akal untuk menggunakan fitur autostart window manager Anda.

Edit: Tidak yakin apakah saya membaca pertanyaan dengan benar, apakah Anda menggunakan KiTTY untuk terhubung ke host linux dan menjalankan gkrell dari jarak jauh melalui X forwarding? Jika itu yang terjadi, Anda jelas tidak dapat menggunakan fitur manajer jendela. :)


1
2018-06-16 20:27



Hampir lupa tentang masalah ini dan menjawab pertanyaan saya sendiri setelah menemukan solusi yang bekerja lama;) Ikuti karya-karya hebat di .bashrc saya selama bertahun-tahun

mygkrellm()
{
    if pidof -x "gkrellm" >/dev/null; then
    echo "Gkrellm is already running. Go to shell!"       
    else
    nohup "/usr/bin/gkrellm" &
    fi
}

1
2018-01-09 09:33