Как определить имя процесса сценария оболочки?

@ElementCollection не предполагается использовать с коллекциями объектов; он используется с коллекциями @Embeddable. Если Thing является сущностью, вы не используете @ElementCollection, вы используете @OneToMany.

@ElementCollection: Определяет коллекцию экземпляров базового типа или встраиваемого класса

Вы можете использовать отображение @OneToMany для установления отношений между пользователем и игровой сущностью.

User.java

@OneToMany(cascade=CascadeType.ALL,fetch= FetchType.LAZY,mappedBy = "user")
private List<Game> games = new ArrayList<>();

//getters and setters

Game.java

@ManyToOne
private User user;

//getters and setters
25
задан Nakilon 10 October 2013 в 16:47
поделиться

5 ответов

Вот способ сделать это, это хак/обходной путь, но он работает довольно хорошо. Не стесняйтесь дорабатывать его под свои нужды, ему определенно нужны некоторые проверки на создание символической ссылки или использование папки tmp, чтобы избежать возможных условий гонки (если они проблематичны в вашем случае).

Демонстрация

обертка

#!/bin/bash
script="./dummy"
newname="./killme"

rm -iv "$newname"

ln -s "$script" "$newname"

exec "$newname" "$@"

dummy

#!/bin/bash
echo "I am $0"
echo "my params: $@"

ps aux | grep bash

echo "sleeping 10s... Kill me!"
sleep 10

Протестируйте его, используя:

chmod +x dummy wrapper
./wrapper some params

В другом терминале, убейте его, используя:

killall killme

Примечания

Убедитесь, что вы можете писать в вашей текущей папке (текущий рабочий каталог).

Если ваша текущая команда:

/path/to/file -q --params somefile1 somefile2

Установите переменную script в wrapper на /path/to/file (вместо . /dummy) и вызвать wrapper следующим образом:

./wrapper -q --params somefile1 somefile2
22
ответ дан 28 November 2019 в 21:48
поделиться

По крайней мере, в Linux killall dvb работает, хотя dvb является сценарием оболочки, помеченным #!. Единственная хитрость состоит в том, чтобы сделать скрипт исполняемым и вызвать его по имени, например,

dvb watch abc write game7 from 9pm for 3:30

Запуск ps показывает процесс с именем

/usr/bin/lua5.1 dvb watch ...

, но killall dvb снимает его .

0
ответ дан 28 November 2019 в 21:48
поделиться

Вы можете использовать команду kill на PID, так что вы можете запустить что-то в фоновом режиме, получить его ID и убить его

PID последнего задания, запущенного в фоновом режиме, можно получить с помощью $! .

echo test & echo $!

1
ответ дан 28 November 2019 в 21:48
поделиться

Эмм... если я не ошибаюсь в вопросе, имя сценария оболочки - это то, как вы назвали файл. Если ваш скрипт называется foo, то killall foo убьет его.

-1
ответ дан 28 November 2019 в 21:48
поделиться

Насколько мне известно, вы не можете сделать это надежно и портативно. В некоторых разновидностях Unix изменение того, что находится в argv [0], сделает свою работу. Однако я не верю, что в большинстве оболочек есть способ сделать это.

Вот несколько ссылок по теме.

2
ответ дан 28 November 2019 в 21:48
поделиться
Другие вопросы по тегам:

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