Perintah timeout adalah utilitas baris perintah yang menjalankan perintah yang ditentukan dan menghentikannya jika masih berjalan setelah periode waktu tertentu. Dengan kata lain, perintah timeout  memungkinkan Anda menjalankan perintah dengan batas waktu yang Anda tentukan. Perintah timeout adalah bagian dari paket utilitas inti GNU yang diinstal pada hampir semua distribusi Linux.

Perintah ini berguna ketika Anda ingin menjalankan perintah yang tidak memiliki opsi batas waktu bawaan, atau menghentikan proses setelah sekian waktu berjalan.

Pada artikel ini, kami akan menjelaskan cara menggunakan perintah timeout  di Linux Terminal.

Cara Menggunakan Perintah timeout

Sintaks untuk perintah timeout adalah sebagai berikut:

timeout [OPTIONS] DURATION COMMAND [ARG]…

DURATION dapat berupa bilangan bulat positif atau angka floating-point, diikuti oleh akhiran unit opsional:

  • s – seconds (detik) (ini adalah opsi default)
  • m – minutes (menit)
  • h – hours (jam)
  • d – days (hari)

Ketika tidak ada unit yang digunakan, standarnya adalah detik. Jika durasinya diatur ke nol, batas waktu yang terkait dinonaktifkan.

Opsi perintah harus disediakan sebelum argumen.

Berikut adalah beberapa contoh dasar yang menunjukkan cara menggunakan perintah timeout :

  • Hentikan perintah ping setelah lima detik::
    timeout 5 ping 8.8.8.8
  • Hentikan perintah setelah lima menit:
    timeout 5m ping 8.8.8.8
  • Hentikan perintah setelah satu menit enam detik:
    timeout 1.1m ping 8.8.8.8

Jika Anda ingin menjalankan perintah yang memerlukan hak istimewa seperti tcpdump, tambahkan dulu awalan sudo sebelum perintah timeout:

sudo timeout 300 tcpdump -n -w data.pcap

Mengirim Signal Tertentu

Jika tidak ada signal yang diberikan, timeout akan menggunakan signal SIGTERM ke perintah tertentu ketika batas waktu tercapai. Anda dapat menentukan signal mana yang akan di gunakan menggunakan opsi-s (--signal).

Misalnya, untuk mengirim SIGKILL ke perintah ping setelah satu menit, Anda dapat menggunakan perintah :

sudo timeout -s SIGKILL ping 8.8.8.8

Signal dapat ditentukan dengan namanya seperti SIGKILL atau nomornya seperti 9. Perintah berikut ini identik dengan yang sebelumnya:

sudo timeout -s 9 ping 8.8.8.8

Untuk mendapatkan daftar semua sinyal yang tersedia, gunakan perintah kill -l:

kill -l

Kill Proses yang Macet

SIGTERM, sinyal default yang dikirim ketika batas waktu terlampaui dapat ditangkap atau diabaikan oleh beberapa proses. Dalam situasi itu, proses terus berjalan setelah sinyal terminasi dikirim.

Untuk memastikan perintah yang dipantau telah berhenti, gunakan opsi -k (--kill-after) yang diikuti oleh periode waktu. Ketika opsi ini digunakan setelah batas waktu yang diberikan tercapai, perintah timeout  mengirim signal SIGKILL ke program yang sesuai dengan input user.

Dalam contoh berikut, timeout  menjalankan perintah selama satu menit, dan jika tidak dihentikan, ia akan “kill” program setelah sepuluh detik:

sudo timeout -k 10 1m ping 8.8.8.8
timeout -k “./test.sh”

Proses akan di kill setelah batas waktu yang diberikan tercapai meski macet.

Mempertahankan Status Exit

timeout  akan return 124 ketika batas waktu telah tercapai. Jika tidak, perintah timeout akan mengembalikan status exit dari perintah yang dikelola.

Untuk return status exit dari perintah bahkan ketika batas waktu tercapai, gunakan opsi --preserve-status:

timeout --preserve-status 5 ping 8.8.8.8

Menjalankan perintah di Foreground

Secara default, timeout  menjalankan suatu perintah di latar belakang. Jika Anda ingin menjalankan perintah di Foreground (latar depan), gunakan opsi --foreground:

timeout --foreground 5m ./script.sh

Opsi ini berguna ketika Anda ingin menjalankan perintah interaktif yang membutuhkan input user.

Kesimpulan

Perintah timeout  digunakan untuk menjalankan suatu perintah tertentu dengan batas waktu yang sesuai dengan kehendak user.

Perintah timeout  adalah perintah sederhana yang tidak memiliki banyak opsi. Biasanya Anda akan menggunakan perintah timeout  hanya dengan dua argumen, duration (durasi), dan perintah yang akan terjadi.