Memberi proses nama tertentu di GNU / Linux?

10

Bagaimana cara meluncurkan suatu proses sehingga akan memiliki pengenal khusus dalam psperintah?

UPD : Saya punya beberapa server yang berjalan di satu kotak. Sebagian besar dari mereka berada dalam mode penempatan. Namun satu dalam pengembangan. Semua server Pythonic dan penyakit adalah bahwa semua server terdaftar sebagai pythondi ps, yang membuatnya tidak mungkin untuk killallsatu dalam pengembangan meninggalkan orang lain utuh.

UPD : Seperti yang disarankan oleh David dan GNUix, saya membuat symlink ke juru bahasa Python dan skrip bash untuk setiap server.

Alex
sumber

Jawaban:

7

Membuat symlink harus melakukan trik, namun, akan lebih membantu jika kita mengetahui penyakitnya dan bukan gejalanya. Apa yang sebenarnya ingin Anda lakukan? Karena mungkin ada cara yang lebih baik

gnuix@defiant)-(08:11pm-:-06/10)--
(~)./0012
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14020 pts/1    00:00:00 0012
14021 pts/1    00:00:00 ps
(gnuix@defiant)-(08:11pm-:-06/10)--
(~)ln -s 0012 weird
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)./weird 
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14046 pts/1    00:00:00 weird
14047 pts/1    00:00:00 ps
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)

Pembaruan: Berdasarkan informasi tambahan yang Anda bisa (saya yakin ada cara yang lebih mudah tetapi saat ini tidak datang kepada saya) minta server Anda menuliskan PID mereka ke file saat startup, maka Anda bisa mematikan -9 | cat /var/run/devserver.pid tapi kemudian itu akan menjadi pertanyaan pemrograman :)

Perbarui lagi: Anda juga bisa melakukan beberapa tipu daya shell untuk mendapatkan PID server ketika Anda meluncurkannya, di atas kepala saya, Anda dapat membuat fungsi shell yang disebut startmyserver misalnya yang akan membungkus perintah yang Anda gunakan untuk memulai server Anda tetapi juga ambil $! ke file berdasarkan nama startup - maka kita berbicara tentang skrip shell yang 'inbounds' @ ServerFault. :-)

GNUix
sumber
4

Anda bisa mengganti nama biner yang akan Anda jalankan. Anda mungkin pergi hanya menggunakan symlink ke biner.

Jika Anda benar-benar ingin mengubah nama, cara terbaik adalah dengan menggunakan pembungkus sederhana yang menetapkan argv dan kemudian menjalankan proses yang ingin Anda jalankan. Tidak punya waktu untuk memberi Anda beberapa kode contoh sekarang, tetapi berteriak keras sekitar 10 jam dan saya akan melihat apa yang bisa saya lakukan.

David Pashley
sumber
tepat maksud saya. Anda memerlukan kode untuk itu (selain mengganti nama / (sym) menghubungkan biner yang bisa bermasalah jika memeriksa argv [0])
Martin M.
Beberapa binari tidak akan berfungsi dengan baik jika sebagian besar dari Anda tertanam (busybox, dropbear)
nhed
3

Lihatlah https://github.com/electrum/procname . Ini memungkinkan Anda untuk mengatur nama proses dari proses apa pun menggunakan variabel anvironment.

Pemakaian:

Jalankan Java dengan set variabel lingkungan LD_PRELOAD dan PROCNAME:

LD_PRELOAD = / path / ke / libprocname.so PROCNAME = halo java -jar foo.jar

itsadok
sumber
2

Ini bukan milik SO karena itu generik, bukan pertanyaan khusus bahasa.

Jawaban singkatnya tidak mudah. Artinya, itu tidak dapat dilakukan dari dalam fungsi shell atau procfs / sysfs Anda. Anda perlu menggunakan utilitas eksternal untuk mencapainya.

Ada deskripsi panjang tentang bagaimana dan mengapa di sini . Waspadalah itu cukup C-sentris.

Memperbarui:

Mereka adalah python yang mengubah permainan. Tanpa sekarang menjadi terlalu SO, mungkin akan lebih mudah untuk memodifikasinya untuk menggunakan modul ini atau pendekatan serupa.

Dan Carley
sumber
touche .. Saya tahu ada cara yang lebih mudah :)
GNUix
Kode C jauh lebih banyak bertele-tele daripada yang seharusnya karena jumlah keluaran yang dilakukannya. Seharusnya mungkin untuk mengecilkannya, tetapi melakukan hampir sama seperti yang saya sarankan. Hanya dengan beberapa kode untuk pergi dengan itu :) Bit itu hilang adalah exec untuk menjalankan kode Anda :)
David Pashley