समय की विशिष्ट अवधि के लिए दौड़ना


9

किसी विशिष्ट प्रक्रिया के लिए उपयोगकर्ता प्रक्रिया पर स्ट्रेस कैसे चलाएं, 1 मिनट का कहना है, उपयोगकर्ता प्रक्रिया को समाप्त किए बिना और Ctrl + C का उपयोग किए बिना?

मैं एक उपयोगकर्ता प्रक्रिया के लिए स्ट्रीम निष्पादन को स्वचालित करने के लिए एक स्क्रिप्ट बनाना चाहता हूं।

जवाबों:


14

साथ timeoutमें GNU coreutils, आप कर सकते हैं:

  • प्रक्रिया आईडी प्राप्त करें
  • Daud timeout 60 strace -p PID

यहाँ एक उदाहरण है।

test.sh:

#!/bin/bash

while :; do
    echo "$$"
    sleep 100
done

चलाओ:

$ ./test.sh
27121

straceसाथ चलाएं timeout:

% cuonglm at ~
% timeout 60 strace -p 27121
Process 27121 attached - interrupt to quit
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 27311
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
wait4(-1, 0x7fff374b8598, WNOHANG, NULL) = -1 ECHILD (No child processes)
rt_sigreturn(0xffffffffffffffff)        = 0
rt_sigaction(SIGINT, {0x45c4d0, [], SA_RESTORER, 0x7fcdc10e05c0}, {0x443910, [], SA_RESTORER, 0x7fcdc10e05c0}, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
write(1, "27121\n", 6)                  = 6
rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fcdc1a699d0) = 27328
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGINT, {0x443910, [], SA_RESTORER, 0x7fcdc10e05c0}, {0x45c4d0, [], SA_RESTORER, 0x7fcdc10e05c0}, 8) = 0
wait4(-1,

1 मिनट के बाद:

....
rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fcdc1a699d0) = 27328
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGINT, {0x443910, [], SA_RESTORER, 0x7fcdc10e05c0}, {0x45c4d0, [], SA_RESTORER, 0x7fcdc10e05c0}, 8) = 0
wait4(-1,  <unfinished ...>
Process 27121 detached
% cuonglm at ~

2

timeoutसबसे सामान्य समाधान लगता है। बस टाइप करें timeout 60s commandऔर कमांड 60 सेकंड में समाप्त हो जाएगा। TERMयदि प्रोग्राम डिफ़ॉल्ट रूप से चल रहा है तो यह भेज देगा । आप उस संकेत को निर्दिष्ट कर सकते हैं जिसे आप --signalविकल्प का उपयोग करके प्राप्त करना चाहते हैं ।

अवधि को सेकंड, मिनट, घंटे या दिनों में सेट किया जा सकता है, उनमें से प्रत्येक को यह निर्धारित करने के लिए एक विशिष्ट प्रत्यय है कि इसका उपयोग क्या होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.