Setiap proses akan dicantumkan dalam output dari ps aux
; apakah berlari, tidur, zombie atau berhenti.
Namun, dalam kasus Anda, sejak Anda menjalankan proses menggunakan sh abc.sh
, sh
adalah aplikasi (shell) yang sedang berjalan dan tidak abc.sh
. Karenanya, ps aux
tidak akan mengandung proses abc.sh
karena yang grep
tidak dapat menghasilkan hasil apa pun.
Jadi, cara yang benar Anda seharusnya menggunakannya adalah sebagai:
ps aux | grep sh
Ini juga dapat mengembalikan Anda proses lain yang menjalankan memiliki string sh
di mana saja di output ps aux
.
Anda harus mencatat bahwa proses akan "berjalan" ketika output ps aux
memiliki STAT
as R
. Jika itu adalah sesuatu selain itu, itu tidak berjalan pada saat Anda memecat perintah untuk memeriksa proses yang berjalan. Status proses yang berbeda dapat ditemukan di halaman manual untuk ps:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped, either by a job control signal or because it is being traced
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent
Anda juga bisa menjalankan top
perintah untuk memeriksa apakah proses sedang berjalan atau tidur dan jumlah CPU, RAM yang dikonsumsi. (Ini lagi akan mencantumkan proses Anda sebagai sh
).
Namun, jika Anda ingin proses Anda terdaftar abc.sh
, maka Anda harus memiliki baris pertama skrip yang Anda jalankan sebagai:
#!/bin/sh
sehingga shell akan tahu aplikasi apa yang digunakan untuk menjalankan skrip (sh dalam hal ini, ubah ke #!/bin/bash
untuk bash) dan kemudian berikan izin yang dapat dieksekusi untuk proses menggunakan:
chmod +x /path/to/abc.sh
mengganti /path/to/
dengan lokasi abc.sh
file dan kemudian jalankan abc.sh
menggunakan
/path/to/abc.sh
kembali mengganti /path/to/
dengan lokasi abc.sh
file.
S+
arti statps aux | grep filename
perintah.Masalah saya
grep
adalah bahwa ini adalah pengurai seluruh baris. Dalam contoh Anda, Anda mencari "abc" tetapi menarik kembali contohgrep
(yang mencari "abc"). Sedikit melingkar. Anda dapat memfilternya tetapi saya menemukan semua itu sedikit menyimpang.Saya akan berpaling
awk
untuk sedikit panik.awk
membagi garis menjadi bidang berdasarkan spasi putih (secara default). Bidang $ 11 + adalah kolom perintah jadi jika perintahnya adalah "sh abc.sh ...",$11
akansh
dan$12
akanabc.sh
.Jika Anda ingin mengontrol output atau rantai dengan Bash's
&&
dan||
operator, Anda bisa tetapi Anda harus sedikit lebih pintar.grep
akan keluar dengan kode status 1 (gagal teknis, pemicu||
) jika tidak ada yang ditemukan tetapiawk
akan selalu keluar dari kode 0. Kita dapat mengubahnya dengan menyuruhnya keluar jika menemukan sesuatu dan melemparkan 1 jika tidak:Tentu saja jika Anda hanya ingin menulis output ke layar, Anda bisa melakukan itu semua di
awk
:sumber
Cara yang tepat untuk memeriksa di sesi bash saat ini jika proses dimulai di latar belakang, seperti
sh abc.sh &
, sudah berjalan atau tidak adalah dengan menggunakanjobs
perintah builtin.Contoh:
Itu berarti bahwa
sh abc.sh
proses yang dimulai di latar belakang sedang berjalan. Jika proses telah selesai, Anda akan melihat sesuatu seperti:Jika Anda memiliki lebih banyak proses yang berjalan di latar belakang, Anda dapat membatasi output hanya untuk
sh abc.sh
proses menggunakan:Lihat
help jobs
untuk info lebih lanjut.Metode di atas hanya akan berfungsi di sesi bash saat ini. Tetapi jika Anda berada di sesi bash lain (misalnya di jendela atau tab terminal lain, atau dalam skrip), selain dari:
Anda juga dapat menggunakan:
yang tampaknya lebih sederhana bagiku. Jika Anda akan melihat perintah yang diketik dalam output (
sh abc.sh
dalam hal ini), itu berarti bahwa prosesnya masih berjalan. Jika tidak, proses telah selesai.sumber
Jika skrip Anda sedang berjalan, itu harus ditunjukkan dengan
ps aux
perintah. Jika tidak ditampilkan olehps
, maka mungkin eksekusi skrip Anda saat ini dihentikan.Output
ps
seperti ini berarti skrip Anda saat ini tidak berjalan,Jika ditampilkan seperti ini, artinya skrip Anda sedang berjalan.
Itu semua berdasarkan pada isi skrip.
Misalnya, jika Anda membuat skrip seperti ini. Ini menampilkan pesan HI pada eksekusi. Butuh beberapa detik untuk menampilkan output dan dihentikan setelah menghasilkan hasil akhir.
Tetapi jika skrip Anda seperti ini,
Butuh beberapa menit untuk menghentikan proses. Sementara itu jika Anda menjalankan
ps aux | grep filename
perintah, itu akan ditampilkan pada output. Karena skrip sedang berjalan.sumber
jika Anda ingin memeriksa semua proses maka gunakan 'top'
jika Anda ingin mengetahui proses yang dijalankan oleh java maka gunakan
ps -ef | grep java
jika proses lain maka gunakan saja
ps -ef | grep xyz
atau cukup/etc/init.d xyz status
jika melalui kode apa pun seperti
.sh
itu./xyz.sh status
sumber
jika Anda hanya ingin memeriksa apakah ada yang sedang dalam proses kemudian pergi ke direktori itu dan ketik
ll -tr
jika Anda melihat.csv
atau.work
lain - lain di akhir file maka itu berarti dalam proses lain tidak.sumber
.csv
adalah untuk file yang dibatasi koma yang tidak terkait dengan proses yang sedang berjalan.