GNU/Linux >> Belajar Linux >  >> Linux

Ubah Lingkungan Proses yang Berjalan?

Bagaimana mungkin untuk mengubah beberapa variabel di env dari proses 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 mematikannya.

Jawaban yang Diterima:

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 melakukannya, tidak ada cara untuk memastikan bahwa itu akan memiliki efek apa pun – prosesnya bisa jadi telah meng-cache variabel lingkungan yang Anda coba colek (karena tidak ada yang bisa mengubahnya).

Jika Anda benar-benar ingin melakukan ini, dan siap untuk mengambil bagian jika terjadi kesalahan, Anda dapat menggunakan debugger. Lihat misalnya pertanyaan Stack Overflow ini:
Apakah ada cara untuk mengubah variabel lingkungan proses lain?

Intinya:

(gdb) attach process_id
(gdb) call putenv ("DISPLAY=your.new:value")
(gdb) detach

Fungsi lain yang mungkin dapat Anda coba panggil adalah setenv atau unsetenv .

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. Uji terlebih dahulu pada proses non-kritis, tetapi pastikan proses pengujian ini mencerminkan sedekat mungkin dengan proses yang Anda coba colok.


Linux
  1. Ubah Font Konsol mode Teks?

  2. Pastikan Sebuah Proses Selalu Berjalan?

  3. Dapatkan Waktu Pengguna Dan Kernel Dari Proses yang Berjalan?

  1. Periksa Proses Jika Sama Sedang Berjalan?

  2. Bagaimana Cara Memulai Ulang (atau Mengatur Ulang) Proses yang Berjalan Di Linux?

  3. Apakah ada cara untuk mengubah variabel lingkungan dari proses lain di Unix?

  1. aksesibilitas variabel lingkungan di Linux

  2. Bunuh proses yang berjalan di port 80

  3. Variabel lingkungan dari proses yang berjalan di Unix?