Я столкнулся с проблемой, когда программа, созданная компилятором Intel, которую я запускаю с набором задач, помещала свои временные файлы в рабочий каталог вместо / tmp (определяется переменной среды TMPDIR). Если запускается сам по себе, он работает правильно. При запуске с набором задач (например,
taskset -c 0 <program>
Тогда кажется, что полностью игнорирует переменную окружения TMPDIR. Затем я проверил это, написав следующий сценарий быстрого bash:
содержимое test.sh:
#!/bin/bash
echo $TMPDIR
При самостоятельном запуске:
$ export TMPDIR=/tmp
$ test.sh
/tmp
При запуске набора задач:
$ export TMPDIR=/tmp
$ taskset -c 1 test.sh
""
Еще один тест. Если я экспортирую переменную TMPDIR внутри своего сценария, а затем использую набор задач для создания нового процесса, он не знает об этой переменной:
#!/bin/bash
export TMPDIR=/tmp
taskset -c 1 sh -c export
При запуске список экспортируемых переменных не включает TMPDIR. Он правильно работает с любой другой экспортируемой переменной окружения. Если я различаю вывод:
export
и
taskset -c 1 bash -c export
Потом вижу, что есть 4 изменения. Экспорт, порожденный набором задач, не имеет LD_LIBRARY_PATH, NLSPATH (переменная компилятора Intel), SHLVL - 3 вместо 1, а TMPDIR отсутствует. Кто-нибудь может сказать мне, почему?
На самом деле я не вижу здесь доказательств того, что $TMPDIR
установлен в вашей среде. Я могу воспроизвести описанное вами поведение, если установлю TMPDIR
как локальную переменную оболочки, например:
$ TMPDIR=/tmp
$ taskset -c 0 sh -c 'echo TMPDIR: $TMPDIR'
Что дает:
TMPDIR:
Но если я экспортирую TMPDIR
в окружающую среду, он работает так, как и следовало ожидать:
$ TMPDIR=/tmp
$ export TMPDIR
$ taskset -c 0 sh -c 'echo TMPDIR: $TMPDIR'
TMPDIR: /tmp
Вы уверены, что TMPDIR
установлен в вашей среде? Вы можете использовать env
команда для сброса текущей среды:
$ env | grep TMPDIR
TMPDIR=/tmp
Если я возьму ваш обновленный скрипт:
#!/bin/bash
export TMPDIR=/tmp
taskset -c 1 sh -c export
И запустите это в моей системе CentOS:
$ sh taskset.sh | grep TMPDIR
export TMPDIR="/tmp"
Работает как рекламируется. Я не уверен, что происходит в вашем окружении.