Вы можете сделать что-то вроде этого -
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
Существует несколько опций решить это. Если Вы используете удар, то $ 'переменной оболочки!' будет содержать 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, когда Вы будете сделаны.
уничтожение его:
ps -e | grep java | cut -f1 -d' ' | xargs kill -9
хранение PID на переменной:
export JAVAPID=`ps -e | grep 'java' | cut -f1 -d' '`
проверка, что это работало:
echo $JAVAPID
Если Вы делаете то, что Вы предлагаете, можно закончить тем, что получили сам 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
Я использую что-то вроде этого:
kill $(ps -A | grep java | cut -b 1-5)
ps aux | grep java | awk '{print $1}' | xargs kill -9
Вот объяснение:
ps aux
дает Вам список всех процессов
grep java
дает Вам все процессы, имена которых и параметры командной строки содержат строку "Java"
awk '{print $1}'
анализирует вывод команды grep в столбцы пробелом и переиздает только первый столбец
xargs kill -9
передачи каждый из результатов awk управляют как параметры к уничтожению-9 команд
Можно легко получить 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