sebuah fungsi di .bash_profile

1

Saya mencoba menulis fungsi dalam .bash_profile untuk mendefinisikan fungsi untuk proses pembunuhan sebagai berikut:

function pkill {
                pid = ps -elf|grep python|grep $1|awk -F " " '{print $4}'
                kill -9 pid
}

Dan yang ingin saya lakukan adalah menggunakan "kata kunci pkill" untuk mematikan proses yang pid = [ps -elf | grep python | grep kata kunci | awk -F "" '{print $ 4}'], dan kode saya tidak berfungsi . Bagaimana saya harus menulis fungsi ini?

tentang membunuh:
proses python saya multithreaded. Saya sudah mencoba kill pid, kill -TERM pid,atau kill -INT pid, tetapi masih dapat menemukannya di daftar proses. Jadi saya menggunakan 'kill -9'.

SpawnST
sumber
hanya sidenode: apakah Anda memiliki perintah sistem pkill ( linux.die.net/man/1/pkill ) tersedia di sistem Anda?
akira
@ Akira: oops, sudah ada: 0
SpawnST
@ Dennis Williamson: Benar. Terima kasih atas saran Anda.
SpawnST
1
kebutuhan upvoting 15 reputasi? o_o
SpawnST

Jawaban:

3
pid=$(ps -elf|grep vim|grep 'screenrc' | awk -F" " '{print $4}')

Tapi Anda mungkin bisa menggunakannya pgrep sebagai gantinya:

pid=$(pgrep -f "python .*$1")

atau

pids=$(pgrep -d' ' -f "python .*$1")
kill -9 $pids

Jika Anda merasa percaya diri (gegabah!):

\pkill -9 -f "python .*$1"
njd
sumber
1
Atau hanya pkill -f "python .*$1", sebagai pkill selalu disertai pgrep.
grawity
2

Apakah ada alasan Anda mendaftar dan kemudian membuang satu ton sampah tambahan?

(Saya menganggap Anda menggunakan GNU ps, tetapi saya lebih suka sintaks BSD ps. Ini juga didukung oleh GNU ps, karena GNU ps mendukung semuanya.)

 # as others have noted 'pkill' is an existing command, so let's not clash with its name
 function pypkill {
      pids=$(ps ax -opid= -ocomm= | grep python | grep "$1" | awk -F " " '{print $1}')
      kill -TERM $pids
 }

Kerusakan:

  • pids =
    • Subkulit dapat mengembalikan lebih dari satu PID. Ini menangkap mereka semua
  • $ ()
    • sebuah subkulit. Perintah di dalam tanda kurung akan dieksekusi dan hasilnya dikembalikan pada tempatnya.
  • ps kapak
    • memperlihatkan semua proses pada sistem (sintaks BSD)
  • -opid = -ocomm =
    • memberitahu ps untuk menampilkan dua kolom: PID dan nama perintah, dan untuk menghilangkan baris header
  • bunuh -TERM $ pids
    • Menggunakan kill -9 adalah pilihan terakhir. Dalam kebanyakan kasus, membunuh -TERM adalah apa yang Anda inginkan, atau mungkin membunuh -INT, sebelum terpaksa membunuh -KILL.
phogg
sumber
0

Bukankah seharusnya lebih seperti

  pid=$(ps -elf|grep python|grep $1|awk -F" " '{print $4}')
  kill -9 $pid
Bobby
sumber
Tampaknya masih tidak berfungsi, info kesalahan berkata: substitusi buruk. :(
SpawnST
@SpawnST: Maaf, saya tidak punya bash di sini untuk mencobanya, saya hanya menebak. :(
Bobby
1
hapus spasi antara -F dan ""
njd
1
Harus $( )tidak ${ }.
grawity