รับกระบวนการที่ดำเนินการโดย MONO บน GNU/Linux

ฉันใช้ MONO เพื่อรันแอปพลิเคชัน การใช้คำสั่ง ps จะแสดงชื่อกระบวนการ MONO หรือ CLI ฉันจะรับชื่อของแอปพลิเคชันที่ดำเนินการโดย MONO ได้อย่างไร

ตัวอย่าง : โมโน myApp.exe

ฉันต้องการทราบว่า myApp.exe กำลังทำงานอยู่หรือไม่ ในที่สุดฉันต้องการทำการตรวจสอบนี้โดยทางโปรแกรม

ไชโย


person LuckyLuke    schedule 15.10.2014    source แหล่งที่มา


คำตอบ (3)


โดยปกติคุณจะรันโปรแกรมของคุณจากเชลล์สคริปต์ และที่นั่นคุณสามารถใช้แฟล็ก -a เพื่อดำเนินการ:

#!/bin/bash
exec -a VisibleName mono program.exe
person lupus    schedule 15.10.2014
comment
สวัสดีขอบคุณ แต่ใช้ไม่ได้สำหรับฉัน ในการเชื่อมต่อ Telnet #1 ฉันใช้ข้อเสนอของคุณ บนการเชื่อมต่อ Telnet #2 ฉันไม่เห็น VisibleName ฉันเพิ่งเห็น MONO ในรายการกระบวนการ เกิดอะไรขึ้น? ไชโย - person LuckyLuke; 15.10.2014
comment
สวัสดี ฉันเข้าใจแล้ว ฉันต้องใช้ ps -ef เพื่อดูชื่อที่มองเห็นได้ ตอนนี้ฉันต้องตรวจสอบว่าแอปพลิเคชันโมโนของฉันสามารถเข้าถึงvisibleName ได้อย่างไร (แอปพลิเคชันนี้จะตรวจสอบว่าแอปพลิเคชันหลักของฉันยังทำงานอยู่หรือไม่ หากแอปพลิเคชันหลักของฉันหยุดดำเนินการ ฉันต้องการเริ่มต้นใหม่อีกครั้งโดยอัตโนมัติ) ไชโย - person LuckyLuke; 15.10.2014
comment
สวัสดี เป้าหมายของฉันคือการมีโซลูชัน .NET/MONO ที่สะอาดตา (ไม่มี DLL ดั้งเดิมและไม่ใช่การไพพ์ PS -ef เอาท์พุต) เนื่องจาก .NET/MONO ไม่รองรับการระบุชื่อที่มองเห็นได้ วิธีแก้ปัญหาเบื้องต้นจึงยังคงเป็นตัวเลือก แต่ขอขอบคุณอีกครั้ง 100x สำหรับข้อเสนอของคุณ ไชโย - person LuckyLuke; 15.10.2014

นี่คือโซลูชันที่ใช้ฟังก์ชัน .NET/MONO (ไม่จำเป็นต้องเรียกใช้ DLLs ดั้งเดิมหรือ piping Shell Output):

  • แสดงรายการกระบวนการทั้งหมด
  • หากชื่อกระบวนการมี MONO หรือ CLI ให้อ่านบรรทัดคำสั่งของกระบวนการนั้น
  • บรรทัดคำสั่งจะต้องมีข้อมูลที่จำเป็นทั้งหมดเพื่อระบุใบสมัครของคุณ

     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);
    }
    

วิธีดำเนินการด้วยตนเอง:

  • เรียกใช้ ps -e เพื่อรับกระบวนการทั้งหมดของ MONO หรือ CLI
  • ค้นหา PID เช่น 2845
  • แสดงบรรทัดคำสั่ง: cat /proc/2845/cmdline

หมายเหตุสำหรับมือใหม่: แนวทางนี้ไม่ได้มีไว้สำหรับ Windows OS เท่านั้น เนื่องจากไม่รองรับแนวคิดของระบบไฟล์ /proc

ไชโย

person LuckyLuke    schedule 15.10.2014
comment
หากแอปโมโนทำงานในพื้นหลัง (เป็นกระบวนการที่ขยาย) ProcessName นั้นเป็น mono-sgen แม้ว่าคุณจะเรียกใช้เป็น mono myApp.exe - person Dima; 18.03.2015

มองไปที่

getting-mono-process- ข้อมูล

โซลูชันใช้วิธีการอ่าน /proc แบบเดียวกัน แต่มีตัวเลือกมากกว่า

ไชโย

person LuckyLuke    schedule 16.10.2014