Это хороший вопрос, и, насколько я помню, некоторые интервью сисадминов используют его.
У вас есть несколько способов сделать это:
Удалить, используя относительный или абсолютный путь. Как сказал SHW в своем ответе:
rm -rf ./-ksh.l.15092015.log
или
rm -rf /full/path/-ksh.l.15092015.log
Устранить, отключив интерпретацию тире (-) для rm
rm -- -ksh.l.15092015.log
И более запутанный способ :), используя inode:
ls -li | grep ksh.l.15092015.log
5383819 -rw-r-r-- 1 root root 0 sep 15 13:17 -ksh.l.15092015.log
найти . -inum 5383819 -delete
Вы также можете использовать mc и vim, но это те "shell" способы, которые я знаю.
kill(2)
— это системный вызов для отправки сигнала процессу, аналога утилите killall
нет.
Простым способом сделать это в C было бы вызвать killall
из вашей программы на C, используя системную (3 )библиотечную функцию или, возможно, popen (3 ).
В качестве альтернативы вы можете прочитать справочную страницу о псевдофайловой системе /proc
и найти имена команд и найти pid самостоятельно.
man 2 kill
man 3 system
man 3 popen
man 5 proc