GNU/Linux >> Belajar Linux >  >> Linux

Apa yang dilakukan `exec [email protected]`?

"[email protected]" bit akan meluas ke daftar parameter posisi (biasanya argumen baris perintah), dikutip secara individual untuk menghindari pemisahan kata dan pembuatan nama file ("globbing").

exec akan mengganti proses saat ini dengan proses yang dihasilkan dari mengeksekusi argumennya.

Singkatnya, exec "[email protected]" akan menjalankan perintah yang diberikan oleh parameter baris perintah sedemikian rupa sehingga proses saat ini digantikan olehnya (jika exec dapat menjalankan perintah sama sekali).


Dua jawaban lain menjelaskan apa exec "[email protected]" melakukan. Jawaban di Stack Overflow ini menjelaskan mengapa ini penting bagi Docker, dan seperti yang Anda duga, ini berkaitan dengan sinyal:

Ini penting di Docker agar sinyal diproksi dengan benar. Misalnya, jika Redis dimulai tanpa exec , itu tidak akan menerima SIGTERM setelah docker stop dan tidak akan mendapat kesempatan untuk mematikan dengan bersih. Dalam beberapa kasus, hal ini dapat menyebabkan hilangnya data atau proses zombie.

Jika Anda memulai proses anak (yaitu, jangan gunakan exec ), proses induk menjadi bertanggung jawab untuk menangani dan meneruskan sinyal sebagaimana mestinya. Inilah salah satu alasan terbaik untuk menggunakan supervisord atau serupa saat menjalankan beberapa proses dalam wadah, karena ini akan meneruskan sinyal dengan tepat.


"[email protected]" di shell mirip Bourne, dalam konteks daftar diperluas ke semua parameter posisi sebagai argumen terpisah.

Dalam skrip, awalnya, parameter posisi adalah argumen yang diterima skrip itu sendiri.

exec adalah menjalankan perintah dalam proses yang sama dengan shell. Itulah perintah terakhir yang akan dijalankan skrip karena setelah itu, proses akan menjalankan perintah lain selain shell.

Jadi, jika skrip Anda adalah

#! /bin/sh -
exec "[email protected]"

Dan Anda memanggil skrip Anda menggunakan baris perintah shell seperti:

/path/to/your-script 'echo' "some  test" 'x y'

Ini akan memanggil exec dengan echo , some test , dan x y sebagai argumen yang akan mengeksekusi echo (di sebagian besar sh implementasi, /bin/echo sebagai kebalikan dari echo shell bawaan) dalam proses yang sama yang sebelumnya menjalankan shell menafsirkan skrip Anda dengan some test dan x y sebagai argumen.


Linux
  1. Apa?

  2. Apa itu Exec 3?

  3. Apa arti nilai simbol dari perintah nm?

  1. Apa arti &di akhir perintah linux?

  2. Apa maksud - dalam perintah linux ini?

  3. Apa arti sintaks |&dalam bahasa shell?

  1. Bagaimana cara mengetahui apa yang dilakukan perintah Linux

  2. Apa yang Dilakukan "lc_all=c"?

  3. Apa Arti `(backquote/backtick) Dalam Perintah?