Это классическое присвоение в условной ошибке - выражение оценивается следующим образом (поскольку сравнение имеет более высокий приоритет , чем присвоение):
if ( killedpid = ( wait( &status ) >= 0 )) { ...
killedpid
получит значение TRUE, равное 1
в C. Чтобы обойти эту проблему, используйте круглые скобки и компилируйте с высокими уровнями предупреждений подобно -Wall -pedantic
:
if (( killedpid = wait( ... )) >= 0 ) { ...