Как остановить выполнение команды в linux
Перейти к содержимому

Как остановить выполнение команды в linux

  • автор:

как прервать выполнение команды в linux bash?

сразу скажу: команды timeout нету и нет возможности её установить =( например запускаю top или иную другую, которая непрерывно выводит данные , и хочу чтобы через секунду или тут же по получению данных без участия ctrl+c или ctrl+z или иных действий с клавиатуры команда делал одиночный вывод и прекращала свою работу

Отслеживать
задан 9 янв 2018 в 10:15
97 1 1 серебряный знак 6 6 бронзовых знаков
вместо top можно использовать ps или запустить top в batch режиме ( top -b или top -n 1 ).
9 янв 2018 в 10:22

top я для примера привел. увы, у меня есть команда, которая выводит одну строку непрерывно, никаких иных параметров нету . =( прервать её можно только по ctrl+c и все. а надо запустить программу и через секунду выйти обратно в шелл =(

9 янв 2018 в 10:27

man timeout : sudo apt-get install timeout; timeout 10 ping google.com Ну и свои велосипеды: mywiki.wooledge.org/BashFAQ/068

12 янв 2018 в 1:52

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Если что, всегда можно попробовать скопировать timeout с подходящей системы или написать свой на баше/перле. На SO есть ряд примеров. Вот самый маленький

#!/bin/sh ( your_command ) & pid=$! ( sleep $TIMEOUT && kill -HUP $pid ) 2>/dev/null & watcher=$! wait $pid 2>/dev/null && pkill -HUP -P $watcher 

Если имя программы точно известно, то можно даже так

(sleep 3 && killall program) & ./program 

Как остановить выполнение команды в терминале?

Выполнение текста, введённого в терминале, как команды.
Добрый вечер! Хочу что-то типа этого: def myfunc1(): (нечто) def myfunc2(): (нечто) .

Выполнение команды в терминале
Здравствуйте, есть скрипт выполнение команды пинг (например). <?php $result = exec (‘ping.

Остановить выполнение команды
Здравствуйте! Каким образом можно остановить выполнение команды? Цель что-то вроде проверки.

Как остановить выполнение BackgroundWorker
здравствуйте. Не пойму как можно остановить поток. Есть две кнопки старт и стоп. private void.

Временная остановка выполнения процесса

В Linux есть возможность временной остановки выполнения процесса. После остановки процесс остается в оперативной памяти, его данные не теряются. Просто он не будет попадать в очередь на выполнения процессора. В любой момент можно продолжить его выполнение.

Для того, чтобы временно остановить выполнение процесса, ему следует послать сигнал STOP(19).

Например, чтобы остановить работающую программу top, ей посылается сигнал.

$ kill -STOP 18026 $ ps -t pts/1 -o pid,s,comm PID S COMMAND 18015 S bash 18026 T top $

Обратите внимание на поле состояние у процесса top, там стоит буква Т. Это значит, что выполнение процесса приостановлено.

В этом месте я должен был написать следующее: «Чтобы продолжить выполнение процесса, пошлите ему сигнал CONT(18)». Так вот, даже если Вы пошлете процессу сигнал CONT, он все равно остается в приостановленном состоянии. Почему так происходит? Дело в том, что данный процесс «привязан» к терминалу, поэтому он не будет реагировать на 18-й сигнал. И возобновлять его работу можно только при помощи средств, встроенных в шелл bash. На сигнал CONT будут реагировать только процессы, не «привязанные» к терминалу, например, процессы-демоны.

# ps -eo pid,s,comm | grep inetd 3743 S inetd # kill -STOP 3743 # ps -eo pid,s,comm | grep inetd 3743 T inetd # kill -CONT 3743 # ps -eo pid,s,comm | grep inetd 3743 S inetd #

Программа inetd — это демон, не «привязанный» к терминалу. Сначала ему был послан сигнал STOP, и он перешел в состояние Т. Затем ему послали сигнал CONT, и он вернулся в рабочее состояние (состояние S означает, что процесс ожидает какой-либо операции ввода-вывода, а значит, он находится в рабочем состоянии.).

В bash есть интересная встроенная возможность — Job control (управление заданиями). Пользователь может останавливать и продолжать выполнение программ. Оболочка «знает» о всех программах, запущенных при ее помощи, и может выдать полный список всех работающих программ. Для получения списка используют команду jobs.

jobs [-lnprs] [jobspec . ]

Но прежде, чем мы рассмотрим использование управления заданиями, разберемся с foreground (интерактивный) и background (фоновый) режимами работы программ.

Когда Вы обычным образом запускаете на выполнение программу, она занимает терминал, точнее, стандартный ввод, вывод и вывод ошибки, связанные с этим терминалом. Пока эта программа не завершит свою работу, Вы не сможете в нем выполнять новые программы, так как не будет доступна командная строка. Такой режим работы называют foreground.

Bash позволяет запускать программы в фоновом режиме. В этом случае, программа начинает работать параллельно оболочке, на экране появляется приглашение командной строки, и Вы сможете запускать другие программы.

Для того, чтобы запустить программу в фоновом режиме, в командной строке после указания всех параметров программы напишите символ &.

Внимание! Если программа, запущенная в фоновом режиме, попытается что-либо прочитать со стандартного ввода, ее выполнение будет временно прекращено.

Jobs показывает только временно приостановленные и работающие в фоновом режиме программы. Также следует учитывать, что шелл (а jobs — это встроенная команда шелл) «видит» только те программы, которые были запущены из него. Если какая-то программа была запущена в фоновом режиме в другом терминале или другой программой, jobs текущего шелл не покажет эту программу в своем списке.

Для того, чтобы временно остановить выполнение программы, выполняющейся в foreground-режиме, достаточно нажать комбинацию клавиш Ctrl+Z. Процесс тут же будет приостановлен, и на экране появится приглашение командной строки. Например, во время работы программы top была нажата указанная выше комбинация клавиш. На экран будет выведено сообщение о приостановке выполнение программы:

[1]+ Stopped top $ ps -o pid,s,comm PID S COMMAND 20185 S bash 21231 T top 21238 R ps $

Если теперь запустить jobs, он покажет список приостановленных или выполняющихся в фоновом режиме программ.

$ jobs [1]+ Stopped top $

1 — это не PID, а внутренний номер программы. Если необходимо увидеть PID программ, тогда используйте параметр –p:

$ jobs -p 21231 $

Еще больше информации показывает jobs с параметром –l:

$ jobs -l [1]+ 21231 Stopped (signal) top $

Символ плюс означает последнюю остановленную программу, минус — предпоследнюю.

Чтобы продолжить выполнение программы в foreground-режиме, можно использовать команду fg. Для продолжения выполнения в фоновом режиме — bg. Обеим программам в качестве параметра можно указывать номер задания — число, которое выводит jobs. Если номер не указан, команда работает с последним процессом.

$ fg top top - 16:34:06 up 6:10, 1 user, load average: 0.00, 0.04, 0.09 Tasks: 74 total, 1 running, 73 sleeping, 0 stopped, 0 zombie Cpu(s): 1.8% us, 0.6% sy, 0.0% ni, 95.2% id, 2.3% wa, 0.0% hi, 0.0% si Mem: 246832k total, 243148k used, 3684k free, 5512k buffers Swap: 514072k total, 70760k used, 443312k free, 111332k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 19357 artur 15 0 198m 48m 21m S 1.1 20.2 0:59.18 soffice.bin 4107 root 15 0 161m 21m 2280 S 0.7 8.9 6:42.39 X

OpenBSD. Как прекратить выполнение команды.

Дал команду dd и все жди пока она закончится. Уже не получится в командную строку вписывать новые команды.

Подскажите кобинацию клавииш для отмены /сброса команды или что ещё там нужно.

Пожалуйста, а то приходится каждый раз перезагружаться.

job14
21.11.09 08:36:31 MSK

Re: OpenBSD. Как прекратить выполнение команды.

GotF ★★★★★
( 21.11.09 08:54:24 MSK )

OpenBSD. Как прекратить выполнение команды.

Ну куда тебе OpenBSD, а…

kapsh ★
( 21.11.09 09:14:54 MSK )

OpenBSD. Как прекратить выполнение команды.

Ты бы хоть для приличия гуглем сначала пользовался.

Deleted
( 21.11.09 09:15:19 MSK )

Не верю!

Не бывает такого, чтоб человек знал про dd и не знал о ctrl+c!

Demon37 ★★★★
( 21.11.09 09:24:25 MSK )

OpenBSD. Как прекратить выполнение команды.

Ctrl+c, Ctrl+z, alt+f*,

2kapsh: ну хочет человек, мб чсв, мб наследство на работе, только вот еще бы хэндбуки осиливал сам, чтобы ламерских вопросов не спрашивать

wlan ★★
( 21.11.09 09:24:42 MSK )

OpenBSD. Как прекратить выполнение команды.

вы бросьте компьютер к чертям собачьим, он вам не нужен

ierarx
( 21.11.09 09:30:36 MSK )
Ответ на: OpenBSD. Как прекратить выполнение команды. от ierarx 21.11.09 09:30:36 MSK

OpenBSD. Как прекратить выполнение команды.

GotF, спасибо. wlan, спасибо за целых две команды. ierarx и другие, я спрашиваю так мало инфы на русском 🙁 Основы пойму, установлю gnome, kde или xfce и буду РАДОВАТЬСЯ ))) Ну помогите, плз, тупому форумчанину 🙁

job14
( 21.11.09 10:15:16 MSK ) автор топика
Ответ на: OpenBSD. Как прекратить выполнение команды. от job14 21.11.09 10:15:16 MSK

OpenBSD. Как прекратить выполнение команды.

Кстати книга Absolute OpenBSD — UNIX For The Practical Paranoid (2003) очень хорошая.

job14
( 21.11.09 10:17:41 MSK ) автор топика
Ответ на: OpenBSD. Как прекратить выполнение команды. от job14 21.11.09 10:15:16 MSK

OpenBSD. Как прекратить выполнение команды.

> мало инфы на русском

Если это не слишком оскорбит BSD, то это по русски и как раз на подходящем уровне. В частности, третья глава.

sin_a ★★★★★
( 21.11.09 10:24:14 MSK )
Ответ на: OpenBSD. Как прекратить выполнение команды. от sin_a 21.11.09 10:24:14 MSK

OpenBSD. Как прекратить выполнение команды.

>Если это не слишком оскорбит BSD

Человек явно не понимает, что такое BSD и что такое Linux. Иначе бы он не стал тратить время на BSD.

nnz ★★★★
( 21.11.09 11:01:52 MSK )
Ответ на: OpenBSD. Как прекратить выполнение команды. от nnz 21.11.09 11:01:52 MSK

OpenBSD. Как прекратить выполнение команды.

Ну я просто не удержался от небольшой порции иронии 🙂

Если он знакомится с BSD, то кто-то ему это наверно уже посоветовал. И возможно семена снобизма тоже уже заброшены.

sin_a ★★★★★
( 21.11.09 11:06:02 MSK )
Ответ на: OpenBSD. Как прекратить выполнение команды. от job14 21.11.09 10:15:16 MSK

OpenBSD. Как прекратить выполнение команды.

>Ну помогите, плз, тупому форумчанину

мало кто опустится до возни с нежелающим гуглить и читать маны

ierarx
( 21.11.09 11:06:44 MSK )
Ответ на: OpenBSD. Как прекратить выполнение команды. от job14 21.11.09 10:15:16 MSK

OpenBSD. Как прекратить выполнение команды.

это ты тот, кто спрашивал, начинать ли ему с Опена? помнишь, что я тебе сказал?

закидываю удочку: чтобы прервать процесс, нужно послать ему определенный сигнал. это можно выполнить, например, командой kill. а можно и с клавиатуры нажать CTRL+C, если программа выполняется в foreground. еще можно не просто прервать команду, а оставить ее выполняться, но «скрыто», в background. для этого нужно нажать CTRL+Z и потом дать команду bg. проверить статус выполнения команд в бэкграунде можно командой jobs. а дальше бегом читать маны, тем более что они в Опене просто отличные! или еще лучше прочти какую-нибуть книгу для новичков в Юникс.

val-amart ★★★★★
( 21.11.09 11:48:21 MSK )
Ответ на: OpenBSD. Как прекратить выполнение команды. от job14 21.11.09 10:15:16 MSK

OpenBSD. Как прекратить выполнение команды.

>Основы пойму, установлю gnome, kde или xfce и буду РАДОВАТЬСЯ )))
>установлю gnome, kde или xfce

OpenBSD не десктопная система. Уж точно не новичковая. Если нужна бздя — посмотри для начала хотя бы на PC-BSD, ну или сразу фрибзд, если чуствуешь в себе силы разбираться что и как.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *