Bagaimana mungkin mengubah beberapa variabel dalam proses env
yang sudah berjalan, misalnya melalui /proc/PID/environ?
"file" itu read-only
.
Perlu mengubah atau menghapus variabel DISPLAY dari pekerjaan batch yang berjalan lama tanpa membunuhnya.
environment-variables
proc
Marcos
sumber
sumber
xpra
bisa jadi menarik.xpra
kedengarannya bermanfaat. Biasanya saya mengalihkan rute ke tampilan non-pengguna yang dihosting olehXvfb
atauXephyr
, tetapi hari ini saya lupa dan lari dari cli daripada cron / at untuk memecahkan masalah keluaran, jadi itu mengganggu saya di:0
Jawaban:
Anda tidak dapat melakukan ini tanpa peretasan yang buruk - tidak ada API untuk ini, tidak ada cara untuk memberi tahu proses bahwa lingkungannya telah berubah (karena itu sebenarnya tidak mungkin).
Bahkan jika Anda berhasil melakukan itu, tidak ada cara untuk memastikan bahwa itu akan memiliki efek apa pun - proses tersebut dapat dengan sangat baik men-cache variabel lingkungan yang Anda coba tusuk (karena tidak ada yang dapat mengubahnya) ).
Jika Anda benar-benar ingin melakukan ini, dan siap untuk mengambil bagian jika ada yang salah, Anda dapat menggunakan debugger. Lihat misalnya pertanyaan Stack Overflow ini:
Apakah ada cara untuk mengubah variabel lingkungan proses lain?
Pada dasarnya:
Fungsi lain yang dapat Anda coba panggil adalah
setenv
atauunsetenv
.Harap benar-benar diingat bahwa ini mungkin tidak berhasil, atau memiliki konsekuensi yang mengerikan jika proses yang Anda targetkan melakukan hal-hal "menarik" dengan blok lingkungannya. Lakukan pengujian pada proses non-kritis terlebih dahulu, tetapi pastikan proses pengujian ini mencerminkan sedekat mungkin yang Anda coba tusuk.
sumber
Tidak perlu melakukannya jika pekerjaan batch dapat membaca dari sistem file untuk mengambil perubahan. Jalankan saja pekerjaan dengan jalur ke direktori unik sementara dan berikan jalur yang sama ke skrip shell anak. Script akan mengunci file di direktori itu dan menulis file dengan nilai baru di dekat file kunci. Skrip pekerjaan dari waktu ke waktu akan mengunci file yang sama, mem-parsing dan membaca perubahan kembali dari file nilai. Untuk mengetahui cara membuat kunci di shell unix hanya mencari
unix shell lock file
ataubash lock file
, sudah ada banyak solusi untuk itu.Manfaat dari solusi ini:
Masalah dalam implementasi di bawah ini:
flock
di Linux untuk mencapai efek pengecualian, di Windows memiliki built-in exclusion)Implementasi disimpan di sini: https://sourceforge.net/p/contools/contools/HEAD/tree/trunk/Scripts/Tools
The
bash
implementasi:set_vars_from_locked_file_pair.sh
testlock.sh
Hal yang sama pada Windows (sebagai contoh portabilitas):
set_vars_from_locked_file_pair.bat
testlock.bat
Untuk menulis file hanya dengan cara yang sama mengunci kode Anda.
sumber