GNU/Linux >> Belajar Linux >  >> Linux

Perintah Bash :(){ :|:&};:akan menelurkan proses ke kematian kernel. Bisakah Anda menjelaskan sintaksnya?

:(){ :|:& };:

..mendefinisikan fungsi bernama : , yang memunculkan dirinya sendiri (dua kali, satu menyalurkan ke yang lain), dan latar belakangnya sendiri.

Dengan jeda baris:

:()
{
    :|:&
};
:

Mengganti nama : berfungsi untuk forkbomb :

forkbomb()
{
    forkbomb | forkbomb &
};
forkbomb

Anda dapat mencegah serangan tersebut dengan menggunakan ulimit untuk membatasi jumlah proses per pengguna:

$ ulimit -u 50
$ :(){ :|:& };:
-bash: fork: Resource temporarily unavailable
$

Lebih permanen, Anda dapat menggunakan /etc/security/limits.conf (setidaknya pada Debian dan lainnya), misalnya:

* hard nproc 50

Tentu saja itu berarti Anda hanya dapat menjalankan 50 proses, Anda mungkin ingin meningkatkannya tergantung pada apa yang dilakukan mesin!


Itu mendefinisikan fungsi yang disebut : yang memanggil dirinya sendiri dua kali (Kode:: | : ). Itu dilakukan di latar belakang (& ). Setelah ; definisi fungsi selesai dan fungsi : memulai.

Jadi setiap instance dari :memulai dua yang baru :dan seterusnya... Seperti proses pohon biner...

Ditulis dalam C biasa yaitu:

fork();
fork();

Linux
  1. 3 perintah Linux untuk mematikan sistem dan Anda akan dapat melakukannya dengan mudah

  2. Perbedaan Antara Operator Bash [[ Vs [ Vs ( Vs ((?

  3. Perintah "eval" Di Bash?

  1. Memahami Tanda Seru (!) Di Bash?

  2. Jelaskan Pilihan Perintah Readlink?

  3. Bisakah Anda Menjalankan Xcode di Linux?

  1. '&&' vs. '&' dengan perintah 'test' di Bash

  2. Apa yang dilakukan -e dalam bash shebang?

  3. Bisakah ps hanya menampilkan proses non kernel di Linux?