Dapatkan proses dijalankan oleh MONO di GNU/Linux

Saya menggunakan MONO untuk menjalankan aplikasi. Menggunakan perintah ps menunjukkan nama proses MONO atau CLI. Bagaimana saya bisa mendapatkan nama aplikasi yang dijalankan oleh MONO?

Contoh : mono myApp.exe

Saya ingin tahu, apakah myApp.exe sedang dijalankan. Akhirnya saya ingin melakukan pemeriksaan ini secara terprogram.

Bersulang.


person LuckyLuke    schedule 15.10.2014    source sumber


Jawaban (3)


Anda biasanya menjalankan program dari skrip shell dan di sana Anda dapat menggunakan flag -a untuk mengeksekusi:

#!/bin/bash
exec -a VisibleName mono program.exe
person lupus    schedule 15.10.2014
comment
Hai, terima kasih, tetapi tidak berhasil untuk saya. Pada koneksi Telnet #1 Saya menggunakan proposal Anda. Pada Koneksi Telnet #2 saya tidak melihat VisibleName. Saya hanya melihat MONO dalam daftar proses. Apa yang salah? Bersulang - person LuckyLuke; 15.10.2014
comment
Hai, saya mengerti. Saya perlu menggunakan ps -ef untuk melihat nama yang terlihat. Sekarang saya perlu memeriksa bagaimana aplikasi mono saya dapat mengakses VisibleName juga. (aplikasi ini akan memeriksa apakah aplikasi utama saya masih berjalan. Jika aplikasi utama saya berhenti dijalankan, saya ingin memulainya lagi secara otomatis) Cheers - person LuckyLuke; 15.10.2014
comment
Hai, Tujuan saya adalah memiliki solusi .NET/MONO yang bersih. (tidak ada DLL asli dan tidak menyalurkan keluaran PS -ef) Karena .NET/MONO tidak mendukung penyediaan VisibleName, solusi awal masih menjadi pilihan. Tapi sekali lagi 100x terima kasih atas lamaran Anda. Bersulang - person LuckyLuke; 15.10.2014

Berikut adalah solusi yang menggunakan fungsi .NET/MONO (tidak perlu memanggil DLL asli atau memipakan Output Shell):

  • Daftar semua proses.
  • Jika Nama proses berisi MONO atau CLI, bacalah baris perintah dari proses tersebut
  • Baris perintah harus berisi semua Informasi yang diperlukan untuk mengidentifikasi aplikasi Anda

     public static int process_count(string application_name)
    {
        int rc = 0;
        string cmdline = "";
    
        Process[] processlist = Process.GetProcesses();
    
        foreach (Process p in processlist)
        {
    
            cmdline = "";
    
            //Console.WriteLine("PID : " + theprocess.Id + " " + theprocess.ProcessName);
    
            if (p.ProcessName.Contains("mono"))
            {
                Console.WriteLine("PID : " + p.Id + " " + p.ProcessName + " " + p.MainModule.FileName);
                cmdline = File.ReadAllText("/proc/" + p.Id.ToString() + "/cmdline");
                Console.WriteLine("CMDLINE : "+cmdline);
            }
    
            if (p.ProcessName.Contains("cli"))
            {
                Console.WriteLine("PID : " + p.Id + " " + p.ProcessName + " " + p.MainModule.FileName);
                cmdline = File.ReadAllText("/proc/" + p.Id.ToString() + "/cmdline");
                Console.WriteLine("CMDLINE : " + cmdline);
            }
    
    
            if (cmdline.Contains(application_name))
            {
                Console.WriteLine("Found existing process: {0} ID: {1}", p.ProcessName, p.Id);
                rc++;
            }
        }
        return (rc);
    }
    

Cara melakukannya secara manual:

  • panggil ps -e untuk mendapatkan semua proses MONO atau CLI
  • Cari PID mis. 2845
  • Tampilkan baris perintah: cat /proc/2845/cmdline

Catatan untuk pemula: Pendekatan ini tidak didedikasikan untuk OS Windows karena tidak Mendukung konsep sistem file /proc.

Bersulang

person LuckyLuke    schedule 15.10.2014
comment
jika aplikasi mono berjalan di latar belakang (sebagai proses yang direntangkan) ProcessName adalah mono-sgen, bahkan jika Anda menjalankannya sebagai mono myApp.exe - person Dima; 18.03.2015

Silakan lihat

mendapatkan-mono-proses- informasi

Solusinya menggunakan pendekatan membaca /proc yang sama tetapi memiliki lebih banyak opsi.

Bersulang

person LuckyLuke    schedule 16.10.2014