Це команда sockdown, яку можна запустити у безкоштовного хостинг-провайдера OnWorks за допомогою однієї з наших безкоштовних онлайн-робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS
ПРОГРАМА:
ІМ'Я
носок - вимикання(2) розетка
трубки 4.2
СИНТАКСИС
носок вниз [ fd [як] ]
ОПИС
носок вниз виконує вимикання(2) системний виклик одного з його файлових дескрипторів, визначених
fd. Можливі значення для як він має
┌───────────┬───────────────────────────────────────── ────────────────────┐
│writeonly │ перетворити на дескриптор файлу лише для запису │
│0 │ перетворити на дескриптор файлу лише для запису │
│лише запис │ символічний для того ж, що й вище │
│1 │ перетворити на дескриптор файлу лише для читання │
│лише для читання │ символічний для того ж, що й вище │
│2 │ повне відключення. читання чи запис більше заборонено │
│повністю │ символічний для того ж, що й вище │
└───────────┴───────────────────────────────────────── ────────────────────┘
За умовчанням fd дорівнює 1 (стандартний вихід) і використовується за замовчуванням як є 1.
ПРИКЛАДИ
Уявіть, що у вас є машина, яка може виконувати певну послугу (у цьому випадку перетворення з ASCII
до фантастичної приписки) :
server$ кран 3000 --in --out enscript -2rGhp -
Потім ви можете підключитися до нього за допомогою шланга. Однак перший приклад входить у тупик:
client$ hose server 3000 -in -out \
sh -c " cat blah.txt & cat > blah.ps "
Enscript блокує очікування введення з сокета, оскільки не весь клієнт
процеси вийшли. Поки cat blah.txt закінчено, cat > blah.ps ще не закінчено, і
не буде завершено, доки процес віддаленого шифрування не завершить запис. Розшифровка
процес не завершить запис, доки не завершить читання, але ця половина клієнт->сервер
сокета все ще відкрито і не буде закрито, доки не будуть завершені всі клієнтські процеси
зроблено. Результат – тупик.
Отже, ми використовуємо sockdown, щоб закрити половину труби
client$ hose server 3000 -in -out \
sh -c "( cat blah.txt ; sockdown ) & cat > blah.ps "
Таким чином, коли cat blah.txt завершено, половина розетки вимикається і пульт дистанційного керування
процес enscript закінчується вхідними даними, змушуючи його скидати вихідні дані та завершувати роботу, тому врешті-решт
весь безлад закінчується чисто.
Примітка: & на шлангу необхідний, щоб запобігти повторному блокуванню. Якби ми просто використали ;
для серіалізації двох процесів cat можливо, що enscript заповнить його
буфер запису до завершення першого кота, спричиняючи блокування та запобігання обох процесів
другий кіт від зливу труби.
Звичайно, це ідіоматичне вживання шланга настільки корисне, що це особлива форма:
client$ hose server 3000 -slave blah.ps
Ян Стірлінг <[захищено електронною поштою]> повідомляє мені про це носок вниз можна використовувати в Linux
/proc/ПІД/fd/ каталоги для розірвання завислих мережевих з’єднань. З тих пір я використовував це
себе на клині MOMspider. Щоб спробувати це, ви повинні знати PID програми та
дескриптор файлу клинового розетки (іноді його можна знайти, запустивши страйк і бач
якщо програма застрягла в a зчитування(2) системний виклик). Якщо PID 991 і сокет
дескриптор 5, ви робите це як root:
bash# sockdown 1 2 > /proc/991/fd/5
ПОМИЛКИ
Розетка операція on без розетки
Недійсний аргумент (бачено on Соляріс) Команда fd вказаний вами не відноситься до сокета. Це
трапляється, коли ви запускаєте sockdown самостійно (малоймовірно, що будь-який із файлових дескрипторів
приєднані до інтерактивної оболонки насправді є гніздами) або якщо ви псуєте свій кран/шланг
команда і забув dup(2) один із ваших дескрипторів.
поганий файл номер Ви дали йому неправильний номер файлу fd. Якщо у вас достатньо навичок
насправді генерувати цю помилку, ви, напевно, знаєте, що не так.
Якщо ви зіткнетеся з іншими помилками, підкажіть мені.
Використовуйте sockdown онлайн за допомогою сервісів onworks.net