Завершить процесс (Например, браузера)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

countmein
Сообщения: 56

Re: Завершить процесс

Сообщение countmein »

Массив у вас лишняя сущность. Сначала список аргументов скрипта заносится в массив, потом из массива обратно в список — для цикла. Это две лишних операции. Кстати, в скрипте закрытия вы забыли [@]. Предлагаю выкинуть массив как ненужную прокладку.
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

Вот так по образу и подобию, нужно почти все остальные скрипты "перепилить"...
...
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

countmein писал:
18.04.2023 16:21
Массив у вас лишняя сущность. Сначала список аргументов скрипта заносится в массив, потом из массива обратно в список — для цикла. Это две лишних операции. Кстати, в скрипте закрытия вы забыли [@]. Предлагаю выкинуть массив как ненужную прокладку.
Спасибо!
Попробую написать , реализовать...
...
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2660
ОС: Gentoo

Re: Завершить процесс

Сообщение ormorph »

countmein писал:
18.04.2023 16:21
Кстати, в скрипте закрытия вы забыли [@]
Не на этот раз это мой косяк, это я забыл. Ну а он просто переписал.
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

ormorph писал(а):
18.04.2023 17:14
Не на этот раз это мой косяк, это я забыл. Ну а он просто переписал.
Эх..!
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

ormorph писал(а):
18.04.2023 17:14
Не на этот раз это мой косяк, это я забыл. Ну а он просто переписал.
Если я массивы отброшу, то и [@] добавлять в завершающий скрипт не нужно.
Я массивы отбросил и гуд! ))))))))))
Добавлено (00:30):
На всякий пожарный [с массивами] :

Код: Выделить всё

#!/bin/bash
#2023xxxx Ver. 3. Cкрипт firefox_222.sh для запуска ПО: браузера Firefox ESR и профилей...

set -x

profiles=($@)

DIR="/tmp"

startfirefox() {
	local PID prof
	prof=$1

        firefox-esr -P "${prof}" &

	PID=$!
	echo ${PID} >"${DIR}/${prof}.pid"
        ls "${DIR}/${prof}.pid"
	wait
	rm "${DIR}/${prof}.pid"

}

for prof in "${profiles[@]}"

do

	if ! [ -f "${DIR}/${prof}.pid" ] ; then

	startfirefox "${prof}" &

	fi

done

Код: Выделить всё

#!/bin/bash
#2023xxxx Ver. 3. Cкрипт k_firefox_222.sh для завершения ПО: браузера Firefox ESR и профилей...

set -x

profiles=($@)

DIR="/tmp"

for prof in "${profiles[@]}"
do
	if [ -f "${DIR}/${prof}.pid" ] ; then
		kill $(cat "${DIR}/${prof}.pid")
	fi
done

Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

Новые версии скриптов [правда я использовал "костылёк" :) ] :

Код: Выделить всё

#!/bin/bash
#2023xxxx Ver. 4. Cкрипт firefox_222.sh для запуска ПО: браузера Firefox ESR и профилей...
# shellcheck disable=SC2046
# shellcheck disable=SC2066
# shellcheck disable=SC2206
# shellcheck disable=SC2128
# shellcheck disable=SC2034  # Unused variables left for readability

set -x

profiles=($@)

DIR="/tmp"

startfirefox() {
	local PID prof
	prof=$1

        firefox-esr -P "${prof}" &

	PID=$!
	echo ${PID} >"${DIR}/${prof}.pid"
        ls "${DIR}/${prof}.pid"
	wait
	rm "${DIR}/${prof}.pid"

}

for prof in "${profiles}"

do

	if ! [ -f "${DIR}/${prof}.pid" ] ; then

	startfirefox "${prof}" &

	fi

done

Код: Выделить всё

#!/bin/bash
#2023xxxx Ver. 4. Cкрипт k_firefox_222.sh для завершения ПО: браузера Firefox ESR и профилей...
# shellcheck disable=SC2046
# shellcheck disable=SC2128
# shellcheck disable=SC2066
# shellcheck disable=SC2206
# shellcheck disable=SC2034  # Unused variables left for readability

set -x

profiles=($@)

DIR="/tmp"

for prof in "${profiles}"
do
	if [ -f "${DIR}/${prof}.pid" ] ; then
		kill $(< "${DIR}/${prof}.pid")
	fi
done

Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20798
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Завершить процесс

Сообщение Bizdelnick »

igor@igor писал:
19.04.2023 01:53
Новые версии скриптов
От разного регистра переменных в глазах рябит. Придерживайтесь единого стиля. Или все в верхнем, или все в нижнем, или глобальные в верхнем, а локальные в нижнем (последний вариант лучше всего, на мой вкус).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

Bizdelnick писал:
19.04.2023 02:12
От разного регистра переменных в глазах рябит. Придерживайтесь единого стиля. Или все в верхнем, или все в нижнем, или глобальные в верхнем, а локальные в нижнем (последний вариант лучше всего, на мой вкус).
Хорошо.
Также "костыли" с shellcheck мне убрать нужно. Ибо с этими "заплатками", код правильным
не будет, к сожалению. [Вот уж где в глазах рябит]
...
Спасибо сказали:
countmein
Сообщения: 56

Re: Завершить процесс

Сообщение countmein »

Код: Выделить всё

profiles=($@)
...
for prof in "${profiles}"
Тут разнобой получается. Или добавить [@], или убрать (). А так в цикл попадает только первый элемент массива.
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

countmein писал:
19.04.2023 05:05
Тут разнобой получается. Или добавить [@], или убрать (). А так в цикл попадает только первый элемент массива.
Спасибо! Подумаю...
...
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

Предполагаю, всё по науке в этот раз сделал [правильно]! :)

Код: Выделить всё

#!/bin/bash
#2023xxxx Ver. 5. Cкрипт firefox_222.sh для запуска ПО: браузера Firefox ESR и профилей...

set -x

profiles=( "$@" )

dir="/tmp"

startfirefox() {
	local pid prof
	prof=$1

        firefox-esr -p "${prof}" &

	pid=$!
	echo ${pid} >"${dir}/${prof}.pid"
        ls "${dir}/${prof}.pid"
	wait
	rm "${dir}/${prof}.pid"

}

for prof in "${profiles[@]}"

do

	if ! [ -f "${dir}/${prof}.pid" ] ; then

	startfirefox "${prof}" &

	fi

done

Код: Выделить всё

#!/bin/bash
#2023xxxx Ver. 5. Cкрипт k_firefox_222.sh для завершения ПО: браузера Firefox ESR и профилей...
# shellcheck disable=SC2046

set -x

profiles=( "$@" )

dir="/tmp"

for prof in "${profiles[@]}"
do
	if [ -f "${dir}/${prof}.pid" ] ; then
		kill $(< "${dir}/${prof}.pid")
	fi
done

Добавлено (08:02):
C новой версией лисы и её профилями всё гуд!
А как быть с более старыми версиями лисы и её профилями?
Cкажите, пожалуйста.
Лиса из /opt запускается.
Я вижу: либо условие вкручивать в универсальный скрипт, либо запускать старую лису с её профилем отдельным скриптом [мне 7601 лиса редко нужна...]
Я вижу отдельным скриптом запускать.
Вы, как считаете?
Скажите, пожалуйста.
Спасибо сказали:
countmein
Сообщения: 56

Re: Завершить процесс

Сообщение countmein »

А из каких соображений оставили массив? Чем он вам дорог? Циклу ведь нужен простой список с пробелами, который и содержится в $@.
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

countmein писал:
19.04.2023 08:14
А из каких соображений оставили массив? Чем он вам дорог? Циклу ведь нужен простой список с пробелами, который и содержится в $@.
Так чтобы наверняка. В смысле, для перестраховки. А ещё shellcheck без массива "ругался"
[где строка с циклом] "Типа нет массива или первого элемента..."
Или я опять всё не так сделал?
...
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2660
ОС: Gentoo

Re: Завершить процесс

Сообщение ormorph »

countmein писал:
19.04.2023 08:14
Циклу ведь нужен простой список с пробелами, который и содержится в $@
А если название профиля содержит пробелы?

Shell

$ cat test.sh
#!/bin/bash

profiles=("$@")

for prof in "${profiles[@]}"
do
echo "${prof}"
done

Shell

$ ./test.sh f1 "f1 1"
f1
f1 1
Попробуйте теперь это проделать просто с переменной. Тут всё правильно, это будет работать. Это как раз и подразумевается под универсальным скриптом.
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

ormorph писал(а):
19.04.2023 09:03
Попробуйте теперь это проделать просто с переменной. Тут всё правильно, это будет работать. Это как раз и подразумевается под универсальным скриптом.
Cпасибо! Попробую.
Спасибо сказали:
countmein
Сообщения: 56

Re: Завершить процесс

Сообщение countmein »

ormorph писал(а):
19.04.2023 09:03
А если название профиля содержит пробелы?
Да, разница есть, не знал про неё. Но если не использовать промежуточную переменную, то работает и без массива.
Т.е. вот так:

Код: Выделить всё

for prof in "$@"
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

countmein писал:
19.04.2023 09:35
Да, разница есть, не знал про неё. Но если не использовать промежуточную переменную, то работает и без массива.
Что такого "криминального" в массиве?
Спасибо сказали:
countmein
Сообщения: 56

Re: Завершить процесс

Сообщение countmein »

igor@igor писал:
19.04.2023 11:06
Что такого "криминального" в массиве?
Я думал, что он абсолютно лишний, т.к. никак не используется. Но раз он позволяет поместить аргументы в другую переменную так, что многословные не разваливаются на части, то от него есть польза. Если зачем-то нужна промежуточная переменная -- например, для лучшей читабельности кода.

А если промежуточная переменная не нужна, то можно просто использовать "$@".
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

Убрал цикл в скрипте. Результат не такой. Не в столбик, а в строчку "выхлоп"
Что не так?

Код: Выделить всё

#!/bin/bash

profiles=("$@")

prof="${profiles[@]}"

	echo "${prof}"

Добавлено (11:35):
countmein писал:
19.04.2023 11:25
А если промежуточная переменная не нужна, то можно просто использовать "$@".
Понятно.
Спасибо сказали:
countmein
Сообщения: 56

Re: Завершить процесс

Сообщение countmein »

echo добавляет перевод строки в конец своего вывода. В цикле echo вызывается для каждого аргумента отдельно, поэтому после каждого получается перевод строки. А здесь вызов один для всего списка.
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

countmein писал:
19.04.2023 11:46
echo добавляет перевод строки в конец своего вывода. В цикле echo вызывается для каждого аргумента отдельно, поэтому после каждого получается перевод строки. А здесь вызов один для всего списка.
Понял.
Спасибо!

Разобрался.
Добавлено (12:35):
countmein писал:
19.04.2023 09:35
for prof in "$@"
Cовершенно верно:

Код: Выделить всё

#!/bin/bash

profiles=("$@")

for prof in "$@"
do
	echo "${prof}"
done

./test2.sh f1 "f1 1"

"Выхлоп" в столбик.
Добавлено (13:06):
И теперь спокойно можно остальные скрипты по образу и подобию "перепиливать"!

Всё-таки я к массивам склоняюсь...
...

Что касается старой лисы, отдельным скриптом. [Мне раз в пятилетку она нужна] Смысла никакого нет условие вкручивать...
...
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

=> Мне нужно подскрипты подпилить. Для главного труъ скрипта выбора запуска ПО:
true.png
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

Да, можно в .xinitrc нужные проги "впилить" А мне вот не нужен никакой софт при запуске, например. Вот почему я со скриптом выбора запуска ПО и заморочился. Также правильный запуск / остановка ПО очень важно...
...
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

Всем привет!
Решил по науке свои скрипты "перепилить" / переделать...
Т. е. на каждую софтину создавался файл .PID + каталог в /tmp , например:

Код: Выделить всё

#!/bin/bash
#2023xxxx Ver. 0. Скрипт: nano_0.bash для запуска текстового редактора nano

set -x

profiles=(nano_0 nano_1)

dir="/tmp/nano_1"
if ! [ -d "${dir}" ] ; then
	mkdir "${dir}"
fi

start_nano_0() {
	local pid prof
	prof=$1

	/usr/bin/xterm -e "/bin/nano" &

	pid=$!
	echo ${pid} >"${dir}/${prof}.pid"
	wait
	rm "${dir}/${prof}.pid"
}

for prof in "${profiles[@]}"
do
 	if ! [ -f "${dir}/${prof}.pid" ] ; then
	start_nano_0 "${prof}" &
	fi
done

Код: Выделить всё

#!/bin/bash
#2023xxxx Ver. 0. Скрипт: k_nano_0.bash для завершения работы текстового редактора nano
# shellcheck disable=SC2046

set -x

dir="/tmp/nano_1"

for pidfile in "${dir}"/*
do
	kill $(cat "$pidfile")
done

sleep 0.5

a='/tmp/nano_1'

printf "\nПросмотр содержимого каталога: /tmp/nano_1\n\n"

ls -la "${a:?}"

printf "\nУдаление содержимого каталога: /tmp/nano_1\n\n"

rm -rf "${a:?}"/*

Код: Выделить всё

#!/bin/bash
#2023xxxx Ver. 0. Скрипт: nano_1.bash для запуска ткстового редактора nano

set -x

profiles=( "$@" )
dir="/tmp/nano_1"

if ! [ -d "${dir}" ] ; then
	mkdir "${dir}"
fi

start_nano_1() {
	local pid prof
	prof=$1

	/usr/bin/xterm -e "/bin/nano" &

	pid=$!
	echo ${pid} >"${dir}/${prof}.pid"
	wait
	rm "${dir}/${prof}.pid"
}

for prof in "${profiles[@]}"
do
	if ! [ -f "${dir}/${prof}.pid" ] ;  then
		start_nano_1 "${prof}" &
	fi
done

Код: Выделить всё

#!/bin/bash
#2023xxxx Ver. 0. Скрипт: k_nano_1.bash для завершения работы текстового редактора nano
# shellcheck disable=SC2046

set -x

profiles=( "$@" )

dir="/tmp/nano_1"

for prof in "${profiles[@]}"
do
	if [ -f "${dir}/${prof}.pid" ] ; then
		kill $(cat "${dir}/${prof}.pid")
	fi
done

Вопрос: мне как сделать - "$HOME/nano_0(1).bash" файл (для редактирования)
[А не "тупо редактор в холостую" запускать]
Скажите, пожалуйста.
Добавлено (20:09):
Конечно, можно не nano использовать, а leafpad , например...
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

Почти все скрипты по науке перепилил...
Класс!
...
Добавлено (19:32):

Код: Выделить всё

#!/bin/bash
#2023xxxx Ver. 0. Скрипт: lxterminal_1.bash для запуска эмулятора терминала lxterminal

profiles=( "$@" )
dir="/tmp/lxterminalpids"

if ! [ -d "${dir}" ] ; then
	mkdir "${dir}"
fi

startlxterminal_1() {
	local pid prof
	prof=$1
#	xterm -xrm 'XTerm.vt100.allowTitleOps: false' -n "${prof}" &
#        lxterminal "${prof}" &

#lxterminal  -n  "${prof}"  &

/usr/bin/lxterminal &

# -xrm 'XTerm.vt100.allowTitleOps: false' -e "$HOME/lxterminal.sh" -n "${prof}" &


	pid=$!
	echo ${pid} >"${dir}/${prof}.pid"
	wait
	rm "${dir}/${prof}.pid"
}

for prof in "${profiles[@]}"
do
	if ! [ -f "${dir}/${prof}.pid" ] ;  then
		startlxterminal_1 "${prof}" &
	fi
done

Код: Выделить всё

#!/bin/bash
#2023xxxx Ver. 0. Скрипт: k_lxterminal_1.bash для завершения работы эмулятора терминала lxterminal
# shellcheck disable=SC2046

profiles=( "$@" )

dir="/tmp/lxterminalpids"

for prof in "${profiles[@]}"
do
	if [ -f "${dir}/${prof}.pid" ] ; then
		kill $(cat "${dir}/${prof}.pid")
	fi
done

Запускаю, например, "$HOME/lxterminal.bash" 0 1 2 3 6 , но запускается только 0-ой lxterminal
Что не так?
Скажите, пожалуйста.
Добавлено (19:55):
В массив только первый элемент попадает...
Эх..! ((((
Добавлено (19:59):
Как быть в итоге?
Скажите, пожалуйста...
...
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

Сколько бы я lxterminal'ов не запускал через скрипт, то всё к одному процессу и файлу *.pid
сводится...
В принципе, не критично, так как я lxterminal очень редко использую, когда буфер обмена нужен. В основном, xterm использую...
...
Добавлено (23:11):
С такой политикой партии - всё шустренько работает + корректный запуск. Корректная остановка ПО...
...
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

Не только со скрипта - один процесс и файл...
Даже если lxterminal с помощью команды запускать...
...
К счатью, ярлычков во Fluxbox'e нет (и заниматься "извращением" т.е. прикручивать ... создавать не хочу..!)
...
:)
Добавлено (11:35):
Почти всё со скриптами закончил ...
И => скоро с сообществом поделюсь.
Для "слабых и не очень" машинок скрипты запуска актуальны.
И для тех кто "минимализмом болеет..!" :)
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1380
ОС: Slackware

Re: Завершить процесс

Сообщение UnixNoob »

igor@igor писал:
18.05.2023 22:47
Сколько бы я lxterminal'ов не запускал через скрипт, то всё к одному процессу и файлу *.pid
Если вам требуется 5 терминалов, то есть tmux или tilix.
А для запуска без ярлычков есть dmenu/rofi. Куда вы в том числе можете скрипты добавлять, при большом желании.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

Спасибо! Нужно потестировать...
...
Спасибо сказали:
Ответить