Dalam bash
, bagaimana saya bisa memulai pekerjaan dalam keadaan berhenti, seolah-olah saya memulainya secara normal dan kemudian segera menekan Ctrl-Z?
Atau seolah-olah saya telah mengirim SIGSTOP ke proses segera, tetapi tanpa memberikan proses untuk mengeksekusi sebelum menerima SIGSTOP.
bash
unix
shell
job-control
nibot
sumber
sumber
Jawaban:
Anda dapat memulai subkulit baru, segera menghentikannya, dan kemudian (yaitu setelah menjalankannya lagi) jalankan perintah Anda. Saya menggunakan variabel $ BASHPID untuk mendapatkan PID dari subkulit, karena $$ masih mengembalikan PID dari induk:
Menggunakan di
exec
sini akan menyebabkanmy_command
proses menggunakan PID yang sama dengan subkulit.sumber
( kill -SIGSTOP $BASHPID; exec my_command )
dan saya pikir kami punya pemenang!Saya tahu pertanyaan ini cukup lama, tetapi kalau-kalau ada orang yang mencari fungsi ini, seperti saya:
Saya baru-baru ini menambahkan ini ke koleksi modul LD_PRELOAD saya ( https://github.com/zardus/preeny ). Menggunakan preeny, Anda dapat memiliki proses menangguhkan sendiri saat startup:
Preeny menunda proses selama startup perpustakaan, sebelum
main()
dipanggil.sumber