2018-03-05

List current processes (Linux)

練習程式,讀取 /proc 下的目錄,如果存在 /proc/*/cmdline,就輸出資料。

#!/usr/bin/env tclsh

set dirs [glob -dir /proc * -type d *]
foreach dir $dirs {
    if {[file exists $dir/cmdline]} {
        set psinfo [open $dir/cmdline r]
        while {1} {
            if {[chan gets $psinfo line] > 0} {
                puts "$dir ---> $line"
            } else {
                if {[chan eof $psinfo]} {
                    break;
                } else {
                    puts "Something is wrong."
                    break;
                }
            }
        }

        chan close $psinfo
    }
}


而 /proc/PID/status 就是這個 process 目前的資訊,所以我們也可以查詢 /proc/self/status 取得自己的資料:
#!/usr/bin/env tclsh

set status [open "/proc/self/status" r]
while {1} {
    if {[chan gets $status line] > 0} {
        puts $line
    } else {
        if {[chan eof $status]} {
            break;
        } else {
            puts "Something is wrong."
            break;
        }
    }
}

chan close $status

沒有留言: