ulimit-t под человечностью

Для одного модуля я бы использовал сборку, похожую на следующую (src/assembly/bin.xml):

<assembly>
  <id>bin</id>
  <formats>
    <format>tar.gz</format>
    <format>tar.bz2</format>
    <format>zip</format>
  </formats>
  <dependencySets>
    <dependencySet>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <outputDirectory>lib</outputDirectory>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>src/main/command</directory>
      <outputDirectory>bin</outputDirectory>
      <includes>
        <include>*.sh</include>
        <include>*.bat</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

Чтобы использовать эту сборку, добавьте следующую конфигурацию в ваш pom.xml:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <descriptors>
        <descriptor>src/assembly/bin.xml</descriptor>
      </descriptors>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

В этом примере сценарии запуска / остановки расположены в src/main/command и объединены в bin, зависимости объединены в lib. Настройте его под свои нужды.

9
задан victor hugo 10 June 2009 в 22:33
поделиться

1 ответ

Как указал Tsf , проблема связана с ошибкой в ядре 2.6.28 . Я оставляю свой исходный ответ, потому что думаю, что он в любом случае может быть полезен.

Из справочной страницы ulimit

-t Максимальное время процессора в секундах.

В отношении ulimit учитывается только Процессорное время . Попробуйте запустить вашу программу так:

time myprogram

Это покажет вам, сколько процессорного времени она действительно использует.

Я подозреваю, что ваш бесконечный цикл содержит sleep () и время сна не влияет на процессорное время процесса.

Это завершается через одну секунду:

me@host:~$ bash
me@host:~$ ulimit -t 1; for (( i=1; 1; i++ )); do a=1; done
Killed

Кажется, что это работает вечно (но, конечно же, не работает):

me@host:~$ bash
me@host:~$ ulimit -t 1; for (( i=1; 1; i++ )); do sleep 1; done

Измеряйте время ЦП вот так .. .

me@host:~$  time for (( i=1; i<5; i++ )); do sleep 1; done

... и 5 секунд спустя ...

real        0m4.008s
user        0m0.000s
sys         0m0.012s

... используется процессорное время только 12 мс.

Я пробовал это на ubuntu Jaunty Jackalope (9.04)

Linux host 2.6.28-11-generic #42-Ubuntu SMP 
Fri Apr 17 01:57:59 UTC 2009 i686 GNU/Linux
17
ответ дан 4 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

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