Cara menjalankan aplikasi untuk waktu yang ditentukan di shell

12

Jika dan Bagaimana mungkin, dalam Terminal, untuk mendapatkan aplikasi untuk berjalan selama 30 detik, sebelum ditutup paksa, dan menggemakan log dari proses itu?

ir-g
sumber
@JacobVlijm Idealnya akan dijalankan sebagai skrip shell karena portabilitas bahasa, terutama karena area penggunaan yang dimaksudkan adalah layanan CI.
ir-g
1
@ ir-g Anda dapat menggunakan perintah batas waktu . mis. perintah timeout 30s
mcantsin

Jawaban:

19

Anda mungkin ingin menggunakan perintah batas waktu .

timeout -k 10s 30s command

yang akan menjalankan perintah selama 30-an dan membunuhnya setelah 10-an jika masih berjalan. - Periksa halaman manual untuk opsi lainnya.

mcantsin
sumber
1
@ ir-g sama-sama Anda mungkin juga ingin memeriksa perintah arloji , yang serupa dan juga sangat mudah digunakan di baris perintah.
mcantsin
2
Terima kasih untuk pointer itu, menurut watchsaya perintah yang sangat menarik. Bisa berguna ...
ir-g
3

Berikut adalah dua cara (tetapi timeoutperintah yang disarankan oleh mcantsin mungkin lebih baik):

  1. Luncurkan perintah di latar belakang, dengan cara itu PID disimpan $!dan Anda dapat menggunakannya untuk membunuhnya setelah waktu yang ditentukan:

    command &
    sleep 30 && kill $!
  2. Luncurkan perintah dan gunakan pkillatau killalluntuk membunuhnya. PERHATIAN: Ini mengasumsikan bahwa hanya satu perintah dengan nama yang berjalan, saya menggunakan firefoxsebagai contoh:

    firefox &
    sleep 30 && pkill firefox

Saya tidak tahu apa yang Anda maksud dengan "log proses itu" tetapi kesalahan standar suatu proses dapat disimpan ke file dengan command 2> logfile.txt.

terdon
sumber