คำสั่ง Bash Run ในบางช่วงเวลา?


12

ฉันกำลังสร้างสคริปต์ทุบตีเพื่อการใช้งานของฉัน ฉันจะรันคำสั่งในบางช่วงเวลาเช่น 20 วินาทีและยกเลิกคำสั่งได้อย่างไร ฉันลองใช้วิธีแก้ปัญหามากมาย แต่ไม่มีอะไรทำงานฉันก็ลองใช้คำสั่งไทม์เอาต์โดยไม่ประสบความสำเร็จ ได้โปรดแก้ปัญหาให้ฉันด้วย

ตัวอย่างเช่น: ฉันต้องการเรียกใช้คำสั่งนี้ในสคริปต์และเทอร์มินัลหลังจาก 10 วินาที

some command

คำตอบ:


14

หืมมที่ควรทำเคล็ดลับ:

xmessage "Hello World" &
pidsave=$!
sleep 10; kill $pidsave

xmessageแสดงกรณีทดสอบอย่างรวดเร็วที่นี่ (ในกรณีของคุณคำสั่ง airodump ควรไปที่นั่น); &วางไว้ในพื้นหลัง

$!เก็บ PID ของกระบวนการเริ่มต้นล่าสุด (ดูเช่น/programming//a/1822042/2037712 ); pidsaveหมายเลขผลิตภัณฑ์ได้รับการบันทึกลงในตัวแปร

หลังจากรอสักครู่ ( sleep) ส่งTERMสัญญาณไปยังกระบวนการ


ขอบคุณเพื่อนมันใช้งานได้ แต่ตอนนี้ฉันมีปัญหา 1 ข้อ ฉันต้องการที่จะเห็นผลลัพธ์ที่ถูกสร้างขึ้นโดยคำสั่ง แต่หน้าต่าง xmessage ไม่แสดงอะไร
Umair Riaz

@UmairRiaz: xmessage เป็นเพียงตัวอย่าง เพื่อปรับตัวอย่างของคุณในคำถามและบันทึกผลลัพธ์ของคำสั่งที่ใช้some command > logfile &ในบรรทัดแรก logfileหลังจากนั้นคุณสามารถวิเคราะห์
mpy

4

จาก bash prompt คุณสามารถใช้ "

  • your_command & sleep 20; kill $!
  • หรือใช้คำสั่งหมดเวลา: เช่นaptget install timeoutและtimeout -k 3m 14s your_command
  • หรือใช้expectตามที่อธิบายไว้ที่นี่: /unix/43340/how-to-introduce-timeout-for-shell-scripting
  • หรือทำกับ Perl: perl -e "alarm 10; exec @ARGV" "Your_command"
  • หรือใช้วิธีแก้ปัญหาที่คลุมเครือนี้: $COMMAND 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID( ที่มาและคำอธิบาย )

1

อีกวิธีคือใช้ pgrep $ pattern หรือ pkill $ pattern ส่งคืน PID ทั้งหมดที่ตรงกับรูปแบบที่กำหนดมองข้ามกระบวนการที่กำลังทำงานอยู่ทั้งหมดบนเครื่อง ดังนั้นในการ จำกัด ขอบเขตของ PID ให้อยู่ในขอบเขตที่คุณเป็นเจ้าของเท่านั้นใช้: pgrep -P $ mypid $ pattern หรือ pkill -P $ mypid $ pattern

ดังนั้นในการรันกระบวนการพื้นหลังตามระยะเวลาที่กำหนดสคริปต์ของคุณจะมีลักษณะดังนี้:

#!/bin/bash 
mypid=$$
run_something &
sleep $time_in_seconds
pkill -P $mypid something

โปรดทราบว่าการดำเนินการนี้จะฆ่ากระบวนการทั้งหมดด้วยรูปแบบชื่อเดียวกันที่ทำงานภายใต้ PID หลักปัจจุบัน ดังนั้นคุณสามารถใช้สิ่งนี้เพื่อเริ่มกระบวนการหลายอย่างและฆ่าพวกมันทั้งหมดพร้อมกันหลังจากเวลาที่กำหนด


0

คุณสามารถใช้นาฬิกาปลุกแบบ command-line เช่นebay-alarm

ติดตั้งสคริปต์นาฬิกาปลุกและทำ

ebay-alarm 10 sec -c some command &

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.