Menggunakan GNU awk
Memeriksa panduan pengguna GNU awk - 7.5.2 Variabel Internal yang Menyampaikan Informasi yang saya temui:
PROCINFO #
Elemen-elemen dari array ini menyediakan akses ke informasi tentang program awk yang sedang berjalan. Elemen-elemen berikut (dicantumkan berdasarkan abjad) dijamin akan tersedia:
PROCINFO ["pid"]
ID proses dari proses saat ini.
Ini berarti bahwa Anda dapat mengetahui PID program saat runtime. Kemudian, itu adalah masalah menggunakan system()
untuk mencari proses dengan PID yang diberikan ini:
#!/usr/bin/gawk -f
BEGIN{ pid=PROCINFO["pid"]
system("ps -ef | awk '$2==" pid " {print $NF}'")
}
Saya menggunakan ps -ef
, yang menampilkan PID pada kolom ke-2. Dengan asumsi eksekusi dilakukan melalui awk -f <script>
dan tidak ada parameter lain, kita dapat mengasumsikan bidang terakhir dari baris berisi informasi yang kita inginkan.
Jika kita memiliki beberapa parameter, kita harus menguraikan baris secara berbeda -atau, lebih baik, gunakan beberapa opsi ps
untuk mencetak hanya kolom yang kita minati.
Uji
$ awk -f a.awk
a.awk
$ cp a.awk hello.awk
$ awk -f hello.awk
hello.awk
Perhatikan juga bahwa bab lain dari panduan pengguna awk GNU memberi tahu kita bahwa ARGV bukanlah jalan yang harus ditempuh:
1.1.4 Program awk yang dapat dieksekusi
Akhirnya, nilai ARGV [0] (lihat Variabel Internal) bervariasi tergantung pada sistem operasi Anda. Beberapa sistem menempatkan 'awk' di sana, beberapa meletakkan pathname penuh awk (seperti / bin / awk), dan beberapa meletakkan nama skrip Anda ('saran'). (dc) Jangan mengandalkan nilai ARGV [0] untuk memberikan nama skrip Anda.