Я пытаюсь запустить скрипт оболочки в Cygwin, но у меня возникла проблема с передачей переменных в подоболочку !!проблема с вызовом cygwin
У меня очень простой скрипт, который фактически принимает PID процесса, и оттуда я хотел бы убить процесс из скрипта.
# my_proc_kill.sh
#
export c=$(ps -W | grep -ir behave | sed 's/\([0-9]\+\).*/\1/')
echo $c
#1
/bin/kill -f $c
#2
sh -c '/bin/kill -f ${c}' "$c"
#3
sh -c '/bin/kill -f [email protected]' _ "$c"
#4
e=$(taskkill /PID $c)
Я попытался убить процесс четырьмя различными способами, и не сработал!
Я не знаю, почему (# 1) и (# 4) работают нормально, если я вызываю их непосредственно в терминале Cygwin, но не при запуске «my_proc_kill.sh».
Еще одна вещь, которую я заметил, это то, что для (# 4), если я заменил «$ c» на фактический номер процесса, а затем запустил «my_proc_kill.sh», тогда это сработает. Таким образом, похоже, что значение переменной «$ c» не передается «taskkill» !! Как я могу изменить код, чтобы taskkill узнал о переменной «$ c»?!?
Но не следует ли устанавливать PID для определенного процесса, если я не убил процесс, независимо от того, в какой оболочке я обращаюсь к этому идентификатору процесса?
Просьба сообщить, как обойти это?
Вот сообщения об ошибках, которые я получаю, когда я бегу сценарий:
5040
kill: illegal pid: 5040
kill: illegal pid: 5040
kill: illegal pid: 5040
kill: illegal pid:
ERROR: Invalid query
Почему «убить» видит это как нелегальный PID? Но когда я использую тот же номер PID (в данном случае 5040) в терминале Cygwin, он работает? (все в порядке)
$/bin/kill -f 5040
Любая идея, как это решить?
Заранее спасибо.
1. замените 'echo $ c'' echo. $ C.', чтобы убедиться, что $ c не содержит пробелов или около того. 2. что убивает -f? неизвестно на моем ubuntu 10. 3. не 'ps -W | grep -ir behave ... 'также печатает pid grep? 4. почему grep -r? 5. Что такое ps -W? – user829755
Я думаю, что это не проблема. Поскольку внутри скрипта я просто заменил $ c фактическим номером PID (для моего случая 5040), и у меня остались те же самые ошибки, что и раньше.Другими словами, я сменил свой сценарий на (/ bin/kill -f 5040) по-прежнему то же самое. Я также пробовал (/ bin/kill/5040) по-прежнему ту же ошибку. Но когда я набираю это точное выражение (/ bin/kill -f 5040) в командной строке Cygwin, он убивает процесс, и все выглядит нормально. – user2201373