Как получить результат системного вызова в переменной оболочки?

Вы можете сделать что-то вроде этого -

  library(splitstackshape)
  newm <- mother_dt[,.(children=unlist(children)),by=mother]
  final_dt <- merge(newm,child_dt,by.x = "children",by.y = "child")

> aggregate(. ~ mother, data = cv, toString)
      mother         children     age
    1   Anya            Erika       9
    2  Penny Prudence, Violet   8, 10
    3    Sam  Jake, Red, Wolf 6, 2, 5
5
задан Geo 3 April 2009 в 16:50
поделиться

6 ответов

Существует несколько опций решить это. Если Вы используете удар, то $ 'переменной оболочки!' будет содержать PID разветвленного последнего - от дочернего процесса. Так, после запуска программы Java сделайте что-то как:

echo $! > /var/run/my-process.pid

Затем после того, как Ваш init сценарий останавливает процесс Java:

# Get the pidfile.
pid=$(cat /var/run/my-process.pid)

# Wait ten seconds to stop our process.
for count in $(1 2 3 4 5 6 7 8 9 10); do
    sleep 1
    cat "/proc/$pid/cmdline" 2>/dev/null | grep -q java
    test $? -ne 0 && pid="" && break
done

# If we haven't stopped, kill the process.
if [ ! -z "$pid" ]; then
    echo "Not stopping; terminating with extreme prejudice."
    kill -9 $pid
fi

Удостоверьтесь, что удалили pidfile, когда Вы будете сделаны.

4
ответ дан 13 December 2019 в 19:36
поделиться

уничтожение его:

ps -e | grep java | cut -f1 -d' ' | xargs kill -9

хранение PID на переменной:

export JAVAPID=`ps -e | grep 'java' | cut -f1 -d' '`

проверка, что это работало:

echo $JAVAPID
0
ответ дан 13 December 2019 в 19:36
поделиться

Если Вы делаете то, что Вы предлагаете, можно закончить тем, что получили сам grep и уничтожили это (так как команда grep содержит строку Java, которую Вы ищете). Можно работать вокруг этого исключением grep (при помощи другого grep!):

pid=`ps -e | fgrep java | fgrep -v grep | awk '{print $1}'`
# check pid has a value
# kill $pid

Вам могло бы также понравиться ps -e -opid,args.

Лучшая альтернатива должна использовать pgrep(1) или pkill(1) если Ваша система имеет их. Больше никаких каналов, семян, awks, сокращений, xargs:

pkill -9 java
1
ответ дан 13 December 2019 в 19:36
поделиться

Я использую что-то вроде этого:

kill $(ps -A | grep java | cut -b 1-5)
0
ответ дан 13 December 2019 в 19:36
поделиться
ps aux | grep java | awk '{print $1}' | xargs kill -9

Вот объяснение:

ps aux дает Вам список всех процессов

grep java дает Вам все процессы, имена которых и параметры командной строки содержат строку "Java"

awk '{print $1}' анализирует вывод команды grep в столбцы пробелом и переиздает только первый столбец

xargs kill -9 передачи каждый из результатов awk управляют как параметры к уничтожению-9 команд

3
ответ дан 13 December 2019 в 19:36
поделиться

Можно легко получить PID или список PIDs в переменное использование обратные галочки и сократить (или awk, если предпочтено) для получения только поля PID:

[user@host ~]$ ps -e | grep java | cut -d' ' -f1
12812
12870
13008
13042
13060

Отметьте в вышеупомянутом примере, у меня есть несколько процессов Java, выполняющих следовательно несколько значений. Если Вы сохраняете это в переменную как так:

JAVA_PROCS=`ps -e | grep java | cut -d' ' -f1`

Можно выполнить итерации посредством процессов для уничтожения их при желании:

for proc in $JAVA_PROCS; do
    kill -9 $proc; 
done

Конечно, если Вы только получаете один процесс, затем нет никакой потребности выполнить итерации, и можно просто выполнить его как:

kill -9 $JAVA_PROCS
1
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: